Keychain/ko
이 문서는 키 모음 프로그램에서 SSH 키 공유 방식을 설명합니다. 이 글에서는 독자 여러분이 기본적인 공개 키 암호화 지식을 갖추었다고 가정합니다.
Keychain is a frontend to ssh-agent and ssh-add, allowing long running sessions and letting the user enter passphases just once. It can also be used to allow scripts access to SSH connections.
배경
손 아귀에 쥔 문제
모든 시스템에 매번 로그인 할 때마다 암호를 입력하는 과정은 불편하며, 게다가 수많은 시스템을 관리할 경우 특히 그렇습니다. 일부 관리자는 스크립트 또는 크론 작업을 ssh 연결 과정을 활용하여 편하게 처리하려 합니다. 각각의 방법에 이 문제에 대한 해결책이 있으며 공개 키 인증으로 시작합니다.
공개 키 인증은 어떻게 동작할까?
클라이언트가 서버의 ssh 데몬에 연결하려 한다고 가정해보겠습니다. 클라이언트는 우선 키 쌍을 만들어 서버에 공개 키를 제공합니다. 그 다음 클라이언트가 연결을 시도할 때마다 서버에서는 공용 키로 암호화한 정보를 던져줍니다. 개인 키에 따른 홀더(클라이언트)만이 이 정보를 해독할 수 있으므로, 올바른 응답을 해야만 인증을 성공적으로 처리할 수 있습니다.
공개 키 인증 사용법
키 쌍 만들기
첫번째 절차에서는 키 쌍을 만듭니다. 이 절차를 수행하려면 ssh-keygen 명령을 활용합니다:
user $
ssh-keygen
기본 값을 허용하고 강한 암호를 입력해보십시오.
루트로 로그인 하는 키일 경우 되도록 강력한 암호를 사용하십시오!
키 쌍 만들기 절차가 끝나고 나면 ~/.ssh/id_rsa 에 개인 키가 들어가고 ~/.ssh/id_rsa.pub에 공개 키가 들어갑니다. 공개 키는 이제 원격 호스트에 복사할 준비가 되었습니다.
Adding or changing a passphrase for the private key can be done as follows:
user $
ssh-keygen -p -f ~/.ssh/id_rsa
서버 준비
~/.ssh/id_rsa.pub 파일을 sshd가 동작하는 서버에 복사해야합니다. 이 키는 ~/.ssh/authorized_keys 파일에 추가하여 원격 서버에 연결하는 사용자의 키가 들어가도록 합니다. 그 다음 ssh 서버 접근 과정을 통해 기반 사용자의 신원을 확인하고 나면, 원격 서버에 접속할 때 공개 키를 자동으로 로그인하는 수단으로 사용할 수 있습니다:
user $
ssh-copy-id -i ~/.ssh/id_rsa.pub server_user@server
ssh-copy-id is a wrapper script for these steps. If this wrapper script is unavailable, then the following steps can be used:
user $
scp ~/.ssh/id_rsa.pub server_user@server:~/myhost.pub
user $
ssh server_user@server "cat ~/myhost.pub >> ~/.ssh/authorized_keys"
user $
ssh server_user@server "cat ~/.ssh/authorized_keys"
마지막 줄 출력 내용에 ~/.ssh/authorized_keys 파일의 내용이 나타나야 합니다. 출력 내용이 올바른지 확인하십시오.
설정 시험
이론적으로, 조건을 잘 갖추었고 서버의 sshd 데몬에서 키 접속을 허용했다면(설정할 수 있음), 서버로 암호를 입력하지 않고도 ssh로 접근할 수 있어야합니다. 클라이언트 개인 키는 앞서 사용한 암호로 복호화해야 하겠지만, 서버의 사용자 계정 암호와 혼동하면 안됩니다.
user $
ssh <server_user>@<server>
id_rsa의 암호를 물어보고 ssh에게 서버의 <server_user>
사용자 접속을 서용합니다. 만약 허용하지 않았다면 <server_user>
사용자로 로그인하고 ~/.ssh/authorized_keys 내용의 각 한 줄 한 줄마다 올바른 항목(공용 키)을 지니고 있는지 검증합니다. 가능하다면 공용키 인증을 허용했는지 sshd 설정을 확인하는 것이 좋습니다.
여기서, 독자 여러분은 아마 이렇게 생각하실텐데요. "단지 암호를 바꿨을 뿐인데 뭔가 문제지?!". 잠시 후에, 다음 장에서 이 암호를 한번만 입력하고 다중 로그인 과정에서 (복호화) 키를 다시 사용할 수 있는지 확실하게 보여드리겠습니다.
공개 키 인증 편의성 구성
ssh-agent로 키 관리하기
다음은 개인키를 한번 복호화 하고 ssh에 암호 없이 접속할 수 있도록 하는 과정입니다. ssh-agent 프로그램이 하는 역할은 정확히 다음과 같습니다.
ssh-agent는 보통 X 세션을 시작할 때 시작하거나 ~/.bash_profile과 같은 쉘 시작 스크립트에서 동작합니다. 유닉스 소켓을 만들어 동작하고, 적당한 환경 변수를 등록하여 소켓으로 연결할 때 서비스상 프로그램이 순차적으로 동작하도록 합니다. 분명히 말씀드리자면, 순차상으로 나열한 모든 X 프로그램이 복호화된 개인 키 모음을 활용하여 X 세션의 상위 프로세스에서만 이런 일이 일어납니다.
user $
eval `ssh-agent`
ssh-agent는 프로그램을 끝내기 전까지 키를 복호화 한 채로 유지합니다. 키 유효 기간을 설정하려면 man ssh-agent에서 언급한
-t
인자를 활용하십시오.ssh-agent를 실행할 때 ssh-agent의 PID를 출력해야 하며, SSH_AUTH_SOCK와 SSH_AGENT_PID 환경 변수를 설정해주어야 합니다. 또한 자체 모음에 자동으로 ~/.ssh/id_rsa를 추가하고, 사용자에게 관련 암호를 물어봅니다. 다른 개인 키가 있어 ssh-agent에 추가해야 한다면 ssh-add 명령을 사용하십시오:
user $
ssh-add somekeyfile
이제 마술을 부릴 차례입니다. 복호화 한 개인 키를 준비하고, 암호를 입력하지 마시고 ssh로 (공개 키를 설정 한) 서버에 접속하십시오:
user $
ssh server
ssh-agent를 그만두(고 나중에 암호를 다시 요구하게 하)려면:
user $
ssh-agent -k
특히, 초기에 몇가지 노력과 시도로 설정을 맞췄다면 ssh-agent 프로세스를 여러개 실행할 수 있습니다. 이 프로세스는 killall ssh-agent를 실행하여 다른 프로세스처럼 강제로 끝낼 수 있습니다.
ssh-agent에서 더 많은 편의성을 취하려 한다면, 다음 장에서 키 모음 활용 절차를 진행하십시오. ssh-agent를 키 모음과 함께 실행하고 ssh-agent 세션 자체에서 강제 종료를 하는지 확인하십시오.
ssh-agent 이외의 영역에서 간편함의 정수를 뽑아내기
키 모음은 로그인을 할 때마다 ssh-agent를 재사용할 수 있게 하며, 사용자의 선택에 따라 사용자가 로그인할 때마다 암호를 물어보기도합니다. 우선 이머지 해보도록 하겠습니다:
root #
emerge --ask net-misc/keychain
성공했다면, 이제 keychain을 사용할 수 있습니다. 활성화하려면 다음 ~/.bash_profile 파일처럼 추가하십시오:
Add the following to the shell initialization file (~/.bash_profile, ~/.zshrc, or similar) to enable it:
'"`UNIQ--pre-00000001-QINU`"'
keychain ~/.ssh/id_rsa
. ~/.keychain/${HOST}-sh
. ~/.keychain/${HOST}-sh-gpg
더 많은 개인 키를 원하는 대로 명령행에 추가할 수 있습니다. 또한
--clear
옵션을 추가하여 쉘을 열 때마다 암호를 물어보게 할 수 있습니다bash를 사용한다면 man keychain의 EXAMPLES 섹션을 확인해보시고 다른 쉘에서의 용례를 참고하십시오. 쉘을 매번 열어볼 때 명령 처리 개념이 다 들어있습니다.
이제 시험해보십시오. 우선 앞 장에서 실행한 ssh-agent를 강제로 끝냈는지 확인하시고, 로그인만 해서 새 쉘을 시작하거나 새 터미널을 여십시오. 명령줄마다 지정한 각각의 키에 대한 암호를 물어봐야 합니다. 모든 쉘은 이 시점 이후로 열릴 때마다 ssh-agent를 재사용하는데, ssh 연결을 처리할 때마다 암호 없이 연결할 수 있게 합니다.
All shells opened after that point should reuse the ssh-agent, allowing to use passwordless SSH connections over and over.
KDE에서 키 모음 활용하기
KDE 사용자는 ~/.bash_profile 파일을 사용하는 대신 KDE 자체에서 ssh-agent를 관리하게 할 수 있습니다. 이렇게 하려면, KDE를 시작할 때 /etc/kde/startup/agent-startup.sh를, KDE를 끝낼 때 /etc/kde/shutdown/agent-shutdown.sh를 실행하도록 합니다. 이 파일을 다음처럼 편집하시면 됩니다:
Here is how one could edit those files:
if [ -x /usr/bin/ssh-agent ]; then
eval "$(/usr/bin/ssh-agent -s)"
fi
if [ -n "${SSH_AGENT_PID}" ]; then
eval "$(ssh-agent -k)"
fi
이제, Konsole과 같이 여러분이 선택하고자 하는 터미널을 실행하고 올바른 키 모음을 불러오기만 하면 됩니다. 예를 들면:
user $
keychain ~/.ssh/id_rsa
해당 키는 KDE 세션이 끝나기 전까지 기억해둡니다(또는 ssh-agent 프로세스를 직접 강제로 끝내기 전까지 유효합니다).
Alternatively use KWallet with kde-plasma/ksshaskpass under Plasma 5
You can also have Plasma automatically ask you for your passphrase upon desktop login. Emerge kde-plasma/ksshaskpass, which will set up an environment variable to use the ksshaskpass application whenever ssh-add is run outside of a terminal. Then create a script as follows, and install it via the Plasma -> System Settings -> Startup and Shutdown -> Autostart.
#!/bin/sh
ssh-add < /dev/null
Recent versions of plasma seem to require autostart scripts to have user-only permissions. You may need to
chmod 700 ssh.sh
before adding the script via the Autostart GUI최종 참고
보안 고려사항
물론 ssh-agent를 활용하면 시스템에 약간의 불안감을 심어줄 수도 있습니다. 다른 사용자가 동작 중인 쉘에 접근한다 치면, 접근한 당사자는 암호 없이 모든 서버에 로그인할 수 있습니다. 결과적으로 서버에 치명적이며, 사용자는 로컬 보안 정책(이 있다면)을 다시금 고려해야합니다. 모든 세션에 대한 보안을 처리할 때 적절한 기준을 취하십시오.
문제 해결
대부분 제대로 동작해야겠지만, 문제가 일어났다면 다음 항목의 충고를 참고해보시는게 좋을 것 같습니다.
- ssh-agent 없이 연결이 안되는 것 같다면, 어떤 문제가 있는지
-vvv
옵션으로 ssh를 사용해보고 문제를 찾아보십시오. 공용키 인증을 사용하지 않도록 서버를 설정하지 않았을 수도 있고 로컬 암호 조차도 물어보지 않도록 설정했을 수도 있습니다! 이런 경우 ssh 명령에-o
옵션을 붙여보시든지 서버의 sshd_config 설정 파일 내용을 바꿔보십시오. - ssh-agent 또는 keychain이 동작하지 않는 것 같다면, 현재 사용하는 쉘에서 사용하는 명령을 이해하지 못할 수도 있습니다. ssh-agent와 키 모음에 대한 맨 페이지를 자세히 살펴보셔서 다른 쉘에서 동작하게 하는 방법을 알아보십시오.
See also
- SSH — the ubiquitous tool for logging into and working on remote machines securely.
외부 자료
- 펀투의 공식 키 모음 프로젝트 페이지
- IBM developerWorks 글 모음에서 키 모음의 개념을 소개합니다.
This page is based on a document formerly found on our main website gentoo.org.
The following people contributed to the original document: Eric Brown, Marcelo Goes,
They are listed here because wiki history does not allow for any external attribution. If you edit the wiki article, please do not add yourself here; your contributions are recorded on each article's associated history page.