에이전트가 생성되면 상위 프로세스에서 자동으로 분리됩니다.
someUser@MyPC:~$ eval "$(ssh-agent -s)"
Agent pid 10222
someUser@MyPC:~$ ps -e --forest | grep ssh-agent
10222 ? 00:00:00 ssh-agent
다른 에이전트를 생성하기 위해 터미널을 닫고 새 터미널을 열면 이제 두 개의 에이전트가 실행되고 있습니다.
someUser@MyPC:~$ eval "$(ssh-agent -s)"
Agent pid 10503
someUser@MyPC:~$ ps -e --forest | grep ssh-agent
10222 ? 00:00:00 ssh-agent
10503 ? 00:00:00 ssh-agent
일부 제어 터미널이 닫히거나 종료되지 않는 한 기존 ssh-agent에 연결할 수 있는 명령이 있습니까?
답변1
시작하면 ssh-agent
두 가지 환경 변수가 제공됩니다: SSH_AUTH_SOCK
및 SSH_AGENT_PID
. 그렇기 때문에 eval "$(...)"
에이전트를 시작하려면 명령이 필요합니다. 에이전트는 변수를 설정하기 위한 셸 명령을 출력하고 eval
해당 명령이 현재 셸 세션에서 실행되도록 합니다.
기존 프록시에 연결하려면 SSH_AUTH_SOCK
기존 프록시의 소켓을 가리키도록 환경 변수를 설정합니다. 다른 터미널이 해당 파일을 가져올 수 있도록 시작 후 변수와 해당 값을 파일로 출력하면 됩니다.
예를 들어:
eval "$(ssh-agent -s)"
echo "SSH_AUTH_SOCK=$SSH_AUTH_SOCK" > ~/.ssh_auth_sock_info
그런 다음 다른 터미널에서 프록시 연결 정보를 가져옵니다.
. ~/.ssh_auth_sock_info
다시 말하지만, 이 SSH_AGENT_PID
변수에는 에이전트의 PID가 포함되므로 로그아웃 스크립트 등에서 이를 사용하여 에이전트를 종료할 수 있습니다.
프록시 PID를 알고 있지만 소켓 경로를 모르는 경우 이를 사용하여 소켓을 찾을 수 있으며 lsof
이를 사용하는 데 필요한 권한이 있습니다. 예를 들어 실행 중에 sudo lsof -p 10222
첫 번째 SSH 에이전트에 대해 열린 파일과 소켓이 표시됩니다. 일반적으로 파일 설명자 #3은 프록시 소켓입니다.