ssh-agent: 어떻게 작동하나요?

ssh-agent: 어떻게 작동하나요?

비밀번호 없이 ssh-agent 로그인을 시도하고 싶습니다(gssapi 및 pubkey 방법을 이미 알고 있지만 이에 대해 배우고 싶습니다). 클라이언트와 서버의 ssh_config(클라이언트) 및 sshd_config(서버)에서 AgentForward를 활성화했습니다.

클라이언트에서 ssh-agent를 시작합니다.

eval `ssh-agent`

내 rsa 키를 추가합니다

ssh-add

ssh-add -l 작동 확인

ssh-add -l
4096 SHA256:******** mysuser@mylocalhost (RSA)

그런 다음 로그인하고 비밀번호를 묻습니다.

ssh remotehost

원격 호스트의 ssh-add -l이 작동하는지 확인합니다.

ssh-add -l
4096 SHA256:******** mysuser@mylocalhost (RSA)

이제 다른 쉘을 열고 SSH를 통해 원격 호스트에 접속하고... 비밀번호를 다시 요청합니다. 지금 로그아웃했다가 로그인하면.. 비밀번호를 다시 물어보네요. 뭐가 문제 야?

또한 새 rsa 키 생성, 비밀번호 추가, ssh-add를 사용하여 추가를 시도했지만 여전히 비밀번호를 요청했습니다.

답변1

터미널 창에서 수동으로 시작 하는 경우 ssh-agent해당 창에서 프록시 기능을 사용할 수 있으며 프로세스는 해당 창에서만 시작됩니다. GUI 세션의 모든 터미널 창에서 에이전트를 사용할 수 있게 하려면 GUI 세션 설정의 일부로 에이전트를 시작해야 합니다.

배포판에는 이를 허용하는 일부 도구가 있을 수도 있고 없을 수도 있습니다. 선택적 PAM 모듈이 이를 수행할 수 있거나 데비안 및 관련 배포판은 다음을 pam_ssh.so통해 X11 세션에 대한 SSH 에이전트를 활성화할 수 있습니다(자세한 내용은 참고자료 참조). 다른 배포판에는 다른 솔루션이 있을 수 있습니다./etc/X11/Xsession.optionsman 5 Xsession.options

기술적으로 SSH 에이전트가 시작되면 SSH 클라이언트가 에이전트와 통신할 수 있도록 하는 Unix 소켓을 생성하고 환경 변수를 SSH_AUTH_SOCK사용하여 해당 위치를 식별합니다. 프록시 전달을 사용하면 sshd원격 호스트는 전달된 프록시 연결에 대해 유사한 소켓 및 환경 변수를 생성합니다.

하나의 로컬 터미널 창에서 에이전트를 시작한 다음 이 환경 변수를 로컬 셸을 실행하는 다른 터미널에 복사하면 두 터미널 모두에서 수동으로 시작된 에이전트를 사용할 수 있습니다. 그러나 일반적으로 SSH_AUTH_SOCK환경 변수가 이미 설정되어 해당 세션에서 시작된 모든 터미널에 자동으로 상속 되도록 GUI 세션 설정의 일부로 에이전트를 시작하는 솔루션을 찾는 것이 더 좋습니다 .

원격 호스트의 관리자는 필요하다고 판단되면 SSH 에이전트 전달을 비활성화할 수 있습니다.

답변2

해결책을 찾으세요.

(잘못) ssh-agent가 비밀번호를 "캐시"했다고 생각하기 전에,

a) 에이전트를 시작합니다.

b) 원격 호스트를 입력하세요

c) 비밀번호가 신비한 "캐시"에 들어갑니다.

d) 원격 호스트에 다시 들어갈 수 있으며 비밀번호가 캐시되어 있으므로 비밀번호를 묻지 않습니다! 완전히 틀렸어요.

SSH를 사용하여 비밀번호 없이 진입하는 방법에는 두 가지가 있습니다.

  1. kerberos 또는 AD를 사용한 Single Sign-On(kerberos 사용)

  2. 공개 키

ssh-agent는 개인 키만 "전달"할 수 있습니다. 예:

SSH-agent를 시작합니다

eval `ssh-agent`
Agent pid 26541

키를 추가했습니다(기본 키를 사용했지만 비밀번호 유무에 관계없이 ssh-keygen 명령을 사용하여 생성된 다른 키를 지정할 수 있습니다).

ssh-add

일을 가장 명확하게 하기 위해

local = my local machine
server1 = first remote server
server2 = second remote server

server1에 원격으로 로그인했는데 이제 ssh-agent가 "전달"되었기 때문에 server1에 공개 키(로컬)가 없더라도 비밀번호를 입력하지 않고도 server2의 server1에서 로그인할 수 있습니다. server2에는 .ssh/authorized_keys에 키(공개)가 있습니다.

ssh -A server1 #ask password
ssh server2 #don't ask password, from server1

ssh-agent가 활성화되지 않은 경우

ssh -A server1 #ask password
ssh server2 #ask password.

gif에 더 잘 설명되어 있습니다. 사용자 "pino"는 비밀번호 입력 없이 원격 호스트 "fedora"에서 원격 호스트 "debian"으로 이동합니다. (비밀번호 없이 입력하려면 slack64의 pubkey를 호스트 debian 파일의 $HOME/.ssh/authorized_keys에 복사해야 합니다. 예) 그러나 ssh-agent를 종료하고 재시도하면 입력이 실패합니다(물론 비밀번호가 생각나면 입력할 수 있습니다).

여기에 이미지 설명을 입력하세요.

관련 정보