이것은 보안과 편리함의 균형을 이루는 전형적인 예입니다. 다행히 여러 가지 옵션이 있습니다. 가장 적합한 솔루션은 사용 시나리오와 원하는 보안 수준에 따라 다릅니다.
암호문이있는 ssh 키 ssh-agent
이제 인증에 키를 사용할 때마다 비밀번호 문구를 입력해야합니다. 이것이 보안 관점에서 가장 좋은 옵션이지만 가장 유용성이 떨어집니다. 이로 인해 약한 암호가 순서대로 선택되어 반복적으로 입력하는 부담이 줄어 듭니다.
암호문이있는 ssh 키 ssh-agent
다음을 추가하면 로그인시 ssh 키 ~/.bash_profile
가 자동으로 시작 ssh-agent
되고로드 됩니다 .
if [ -z "$SSH_AUTH_SOCK" ] ; then
eval `ssh-agent -s`
ssh-add
fi
이제 로그인 할 때마다 비밀번호 문구를 입력해야합니다. 사용성 측면에서 약간 ssh-agent
나아졌지 만, 로그인 세션 중 키 사용 여부에 관계없이 암호 문구 를 묻는 단점이 있습니다. 각각의 새 로그인은 ssh-agent
명시 적으로 종료되지 않는 한 로그 아웃 후에도 메모리에 추가 된 키로 실행중인 상태로 유지되는 고유 한 인스턴스를 생성합니다 .
ssh_agent
로그 아웃시 종료 하려면 다음을 추가하십시오.~/.bash_logout
if [ -n "$SSH_AUTH_SOCK" ] ; then
eval `/usr/bin/ssh-agent -k`
fi
또는 다음에 ~/.bash_profile
trap 'test -n "$SSH_AUTH_SOCK" && eval `/usr/bin/ssh-agent -k`' 0
Collin Anderson 's answerssh-agent
과 같이 파일 시스템의 고정 위치에 에이전트에 대한 지속적인 통신 소켓을 작성하면 여러 인스턴스를 작성할 수 없습니다 . 그러나 이는 명시 적으로 종료 된 암호 해독 된 키가 로그 아웃 후에도 메모리에 남아 있지 않으면 여러 에이전트 인스턴스를 생성하는 것보다 개선 된 것입니다.
데스크탑에서 Gnome Keyring SSH Agent 와 같이 데스크탑 환경에 포함 된 ssh-agent는 일반적으로 로그인 세션 중에 ssh-key를 처음 사용할 때 암호문을 프롬프트하도록 만들 수 있으므로 더 나은 접근 방법이 될 수 있습니다. 세션이 끝날 때까지 해독 된 개인 키를 메모리에 저장하십시오.
암호문이있는 ssh 키 ssh-ident
ssh-ident
는 ssh-agent
사용자를 대신하여 관리 하고 필요에 따라 ID를로드 할 수있는 유틸리티입니다 . 에 액세스해야하는 터미널, ssh 또는 로그인 세션 수에 관계없이 필요한만큼 키를 한 번만 추가합니다 ssh-agent
. 또한 연결중인 호스트 또는 ssh 디렉토리에서 호출 된 에이전트에 따라 다른 에이전트 및 다른 키 세트를 추가하고 사용할 수 있습니다. 이렇게하면 다른 호스트와 에이전트 전달을 사용할 때 키를 격리 할 수 있습니다. 또한 GitHub와 같은 사이트에서 여러 계정을 사용할 수 있습니다.
을 활성화하려면 ssh-ident
설치하고 다음에 다음 별칭을 추가하십시오 ~/bash_profile
.
alias ssh='/path/to/ssh-ident'
암호문이있는 ssh 키 keychain
keychain
는 ssh-agent
귀하를 대신하여 관리 ssh-agent
하며 로그인 세션이 끝날 때 계속 실행되도록 하는 작은 유틸리티입니다 . 이후 로그인시 keychain
기존 ssh-agent
인스턴스에 연결됩니다 . 실제로 이것은 재부팅 후 첫 번째 로그인 중에 만 암호를 입력해야 함을 의미합니다. 이후 로그인시 기존 ssh-agent
인스턴스 의 암호화되지 않은 키 가 사용됩니다. 또한 암호 cron
없는 ssh 키가없는 작업 에서 암호없는 RSA / DSA 인증을 허용하는 데 유용 할 수 있습니다 .
사용하려면 keychain
설치하고 다음과 같이 추가하십시오 ~/.bash_profile
.
eval `keychain --agents ssh --eval id_rsa`
보안 관점에서, ssh-ident
그리고 keychain
보다 더 있습니다 ssh-agent
특정 세션의 수명에 제한 인스턴스하지만 편의의 높은 수준을 제공합니다. 의 보안을 향상시키기 위해 keychain
일부 사람들 --clear
은 ~/.bash_profile
키 체인 호출에 옵션을 추가합니다 . 이 암호를 사용하면 위와 같이 로그인시 다시 입력해야하지만 cron
사용자가 로그 아웃 한 후에도 작업은 여전히 암호화되지 않은 키에 액세스 할 수 있습니다. keychain
위키 페이지는 더 많은 정보와 예제가 있습니다.
암호가없는 ssh 키
보안 관점에서 볼 때 개인 키는 노출 될 경우 완전히 보호되지 않으므로 최악의 옵션입니다. 그러나 이것은 재부팅 후 암호를 다시 입력 할 필요가없는 유일한 방법입니다.
와 암호로 SSH 키, ssh-agent
, 에 암호를 전달하는 ssh-add
스크립트
ssh-add
예를 들어 echo "passphrase\n" | ssh-add
, 스크립트에서 암호를 전달하는 것은 간단한 생각처럼 보일 수 있지만 이는 암호를 ssh-add
읽지 않는stdin
/dev/tty
것처럼 보이지만 직접 읽을 수 있도록 개방되어 있습니다 .
이 될 수있다 해결할 와 expect
대화 형 응용 프로그램을 자동화하기위한 도구. 아래는 스크립트에 저장된 암호를 사용하여 ssh 키를 추가하는 스크립트의 예입니다.
#!/usr/bin/expect -f
spawn ssh-add /home/user/.ssh/id_rsa
expect "Enter passphrase for /home/user/.ssh/id_rsa:"
send "passphrase\n";
expect "Identity added: /home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa)"
interact
비밀번호 문구는 스크립트의 일반 텍스트로 보안 관점에서 저장되므로 비밀번호가없는 ssh 키를 사용하는 것보다 낫지 않습니다. 이 방법을 사용 expect
하려면 암호를 포함하는 스크립트에 적절한 권한이 설정되어 있어야하며 키 소유자 만 읽고 쓸 수 있고 실행할 수 있도록해야합니다.