답변:
클라이언트에서 ssh 에이전트 전달이 사용 가능하고 ( ForwardAgent yeson ~/.ssh/config) 원격 서버에서도 사용 가능한 경우, 원격 서버 AllowAgentForwarding yes에 로깅 할 때 환경 변수 SSH_AUTH_SOCK가 존재해야합니다. 그런 다음 다른 서버에 로그인하면 (공개 키는이 세 번째 서버에 있어야 함) 비밀번호를 입력하라는 메시지가 표시되지 않습니다.
명확히하기 위해 :
home$ ssh-add
Enter passphrase ...
Identity added ...
$ ssh hostA
hostA$ env | grep SSH_AUTH_SOCK
SSH_AUTH_SOCK=/tmp/...
$ ssh hostB
hostB$
ssh-add나를 위해 속임수를 썼는지 것입니다. 나는 그것에 대해 모르고 몇 달 동안 일했습니다. 그런 다음 데스크톱을 Unity에서 LXDE로 전환했으며 에이전트 키 전달이 작동을 멈췄습니다.
ssh-add때 새 콘솔 창을 열 때마다 실행해야합니다 . 그래서 그 명령 줄을 끝에 추가 ~/.bash_profile했으며 이제 인증 에이전트 전달이 투명하게 작동합니다!
ssh-agent. 올바르게 설정 하지 않았다고 생각 합니다. mah.everybody.org/docs/ssh
"${SSH_AUTH_SOCK}"은 소켓입니다.if [[ ! -S "${SSH_AUTH_SOCK}" ]]; then echo "warn: no forward agent detected ('${SSH_AUTH_SOCK}' is not a socket)"; fi
환경 확인 SSH_AUTH_SOCK은 직접 ssh 연결에 적합합니다.
프록시 ( proxy_command) 를 사용 하면 다음과 같은 연결이 생길 수 있습니다.
local-> hostA-> hostB-> hostC->hostD
에이전트 전달이 모든 해당 호스트에서 활성화 된 경우 모든 호스트에서 SSH_AUTH_SOCKssh 키를 설정하고 "포함" local합니다.
이제 에이전트 전달이 비활성화 hostB되었지만 활성화 되었다고 가정 합니다 hostC. SSH_AUTH_SOCK설정 hostD되지만 실제로는 "비어 있습니다". 물론 에이전트는로 전달되지만에서로만 전달 hostC됩니다 hostD. 체인이 끊어졌습니다.
이제 실제로 키를 사용할 수 있는지 확인하려면을 hostD호출하면 ssh-add됩니다. 어떤 경우에도 코드 1로 종료되지만 키를 사용할 수 없으면 다음과 stderr같이 표시됩니다 .
인증 에이전트에 대한 연결을 열 수 없습니다.
따라서 SSH_AUTH_SOCK플러스를 확인 하여 ssh_add출력이 없는지 확인할 수 있습니다 .
ssh-find-agent기존 ssh-agent를 찾고 사용 하는 스크립트 가있는 멋진 GitHub 저장소를 보여줍니다. 매우 편리합니다! 리포지토리에는 README에 몇 가지 예가 있습니다. SSH 출력을 보지 않고 SSH 구성 파일 검사와 함께 ssh-agent가 활성화되어 있는지 여부를 감지 할 수 있습니다.