Cygwin에서 ssh-agent를 시작하는 가장 좋은 방법은 무엇입니까?

Cygwin에서 ssh-agent를 시작하는 가장 좋은 방법은 무엇입니까?

ssh-agentSSH passthrough를 자주 사용하기 때문에 Cygwin을 시작할 때 시작하고 싶습니다 .

나는 다음을 추가해 보았습니다:

eval `ssh-agent.exe`

my 에 있지만 새 터미널 창을 열 .bashrc때마다 이 실행되고 따라서 바람직하지 않은 새로운 s가 생성되어 통과를 방해합니다.Alt-F2.bashrcssh-agent

그런 다음 eval 명령을 로 이동하려고 시도했지만 .bash_profile이것도 동일한 문제가 발생합니다. 모든 새 터미널 창이 새 로그인 셸로 간주되는 것 같습니다.

세 번째 옵션은 을 사용하는 것입니다 cygrunsrv. 그러나 방금 그것에 대해 알았고 이 특정 목적으로 사용하는 방법과 아마도 더 중요한 것은 서비스가 생성된 위치에서 SSH_AUTH_SOCK및 정보를 생성된 모든 새 셸에 전달하는 방법에 대해 명확하지 않습니다. SSH_AGENT_PID.

이 결과를 달성하는 최선의 방법(단일 ssh-agent가 실행되고 대기하며 해당 정보를 새로 열린 쉘에서 즉시 사용할 수 있음)에 대한 제안을 환영합니다.

답변1

에 넣을 수 있지만 .bashrc다시 시작하기 전에 이미 실행 중인지 확인해야 합니다. 예를 들어, 다음을 수행할 수 있습니다.

if [ -z "$SSH_AUTH_SOCK" ]; then
    (umask 077; ssh-agent > "$HOME/.ssh/environment")
    ssh-add
fi

프로세스의 일부로.

Also, if the agent is not running, you could first test if that environment file exists and source it like

environ="$HOME/.ssh/environment"
if [ -f "$environ" ]; then
    . "$environ" >/dev/null
fi

if [ -z "$SSH_AUTH_SOCK" ] || ! ps -p "$SSH_AGENT_PID" | grep -q ssh-agent; then
    (umask 077; ssh-agent > "$environ")
    ssh-add
fi

이에 대해 자세히 설명하는 긴 답변이 있습니다.여기U&L 사이트에서

이와 같은 작업을 수행하지만 environ내 홈 디렉터리가 네트워크 공유에 있고 에이전트를 다른 호스트에서 동시에 실행하고 싶기 때문에 파일에 현재 호스트 이름이 포함되어 있습니다.

그리고 이것이 프로세스 간에 변수를 전달하는 방법에 대한 질문에 어떻게 대답하는지 명시적으로 설명하기 위해 SSH_AUTH_SOCK출력을 ssh-agent파일에 저장하고 각 셸에서 다시 소스를 제공합니다.

관련 정보