tty2에 bash 세션이 있고 ssh-agent
이전 세션에서 나에게 속한 프로세스(동일한 사용자 ID)가 있습니다(TTY = ?).
tty2에서는 다음과 같이 ssh-add
말합니다.
Could not open a connection to your authentication agent.
eval $(ssh-agent)
이미 실행 중인 프로세스가 있어도 로그인할 때마다 프로세스를 시작해야 합니까 ssh-agent
? 하지만 결국에는 ssh-agent
많은 프로세스 인스턴스가 실행됩니다. :-(
편집: 이미 실행 중인 프로세스를 사용하고 싶습니다 ssh-agent
.
다음과 같이 이미 실행 중인 항목에 연락하는 방법을 찾았습니다 ssh-agent
.
export SSH_AUTH_SOCK=$(find /tmp/ssh-*/ -user $USER -type s -name "agent.*" 2>/dev/null | head -1)
export SSH_AGENT_PID=$(echo $SSH_AUTH_SOCK | cut -d. -f2)
그러나 이것이 매우 안전한지는 잘 모르겠습니다.
편집 2: 이 명령을 실행할 때마다 명령은 eval $(ssh-agent)
프로세스의 새 인스턴스를 시작합니다.ssh-agent
답변1
ssh-agent 출력을 동시에 평가하고 저장할 수 있습니다.
eval $(ssh-agent | tee agent.env)
그런 다음 다른 터미널이나 후속 세션에서
source agent.env
좀 더 보안을 강화하기 위해 권한을 강화합니다.
chmod go-rwx agent.env
답변2
첫째, SSH 세션을 통해 이 작업을 수행하고 있습니까? 그렇다면 ssh-agent를 사용하거나 사용하지 않을 수도 있습니다. 이 옵션은 호스트의 SSH 에이전트를 원격 서버로 전달합니다. 그러면 SSH 키를 원격 서버에 복사할 필요조차 없습니다.ssh -A [email protected]
-A
원래 질문으로 돌아가서: 이것을 실행할 때의 문제점은 ssh-agent
기본적으로 매번 다른 임의의 소켓 이름을 사용한다는 것입니다. 당신이 원하는 것은 ssh-agent -a
고정 콘센트를 제공하는 옵션을 사용하는 것입니다. 그런 다음 몇 번 호출하더라도 다른 ssh-agent가 시작되지 않습니다.
이것은 항상 동일한 ssh-agent를 재사용하거나 ssh-agent가 실행되지 않는 경우 시작하는 간단한 스크립트입니다. 또한 이 3줄을 한 줄 별칭으로 쉽게 결합할 수도 있습니다.
# set SSH_AUTH_SOCK env var to a fixed value
export SSH_AUTH_SOCK=~/.ssh/ssh-agent.sock
# test whether $SSH_AUTH_SOCK is valid
ssh-add -l 2>/dev/null >/dev/null
# if not valid, then start ssh-agent using $SSH_AUTH_SOCK
[ $? -ge 2 ] && ssh-agent -a "$SSH_AUTH_SOCK" >/dev/null