답변:
ssh-agent는 세션을 시작하고 완료되면 사용자 세션이 종료됩니다. 따라서 ssh-agent 이후의 모든 명령은 로그 오프 후에 실행될 수 있습니다.
원하는 것은 다음 session-script
과 같은 세션 명령을 포함 하는 것 입니다.
#!/bin/bash
ssh-add /path/to/key
bash -i # or other session starter
그런 다음 시작하십시오 ssh-agent session-script
.
스크립트 상단에 다음을 입력하십시오.
eval `ssh-agent`
스크립트는 다음과 같아야합니다.
#!/bin/bash
eval `ssh-agent`
ssh-add /path/to/key
...
...
설명
주변의 백틱 ssh-agent
은 출력을 수집합니다. eval
출력을 수집하여 단일 명령으로 연결 한 다음 명령을 실행합니다. 그런 다음 ssh-add
키 자격 증명을 제공 하는 데 사용할 수 있습니다 .
eval $(ssh-agent)
bash -i
스크립트 끝에 넣을 때까지 작동하지 않았습니다 .
에이전트가 필요한 스크립트에서 이와 같은 작업을 수행하는 경향이 있습니다.
#!/bin/bash
# if we can't find an agent, start one, and restart the script.
if [ -z "$SSH_AUTH_SOCK" ] ; then
exec ssh-agent bash -c "ssh-add ; $0"
exit
fi
... and so on.
기본적으로 스크립트가 가장 먼저 수행하는 것은 에이전트가 실행 중인지 확인합니다. 실행되지 않으면 스크립트 대신 새 프로세스를 시작하는 데 사용됩니다. 에이전트가 시작되고 키가 추가 된 후 마지막으로 스크립트가 다시 호출됩니다 (참조 $0
).
.. "ssh-add ; $0 $*"
하거나 .. "ssh-add ; $0 $@"
대신 사용할 수 있습니다. 완벽하지는 않지만 많은 경우에 확실히 작동합니다. 가장 좋은 해결책은 거의 항상 에이전트를 다른 어떤 것보다 먼저 실행하는 것입니다. 이것은 모호한 경우에 유용 할 수 있습니다.
나는 이것이 나를 위해 일한다는 것을 알았다.
eval `ssh-agent` # create the process
ssh-add ~/.ssh/priv_key # add the key
git -C $repo_dir pull # this line is the reason for the ssh-agent
eval `ssh-agent -k` # kill the process
ssh-agent 프로세스를 작성하고 키를 추가하고 필요한 작업을 수행 한 다음 종료하십시오. 나중에 실행 중인지 확인할 필요가 없습니다.
이 경우 키 체인 을 사용하는 것이 좋습니다
데비안 / 우분투 :
apt-get install keychain
RHEL / 페도라 / CentOS
yum install keychain
.bashrc에 다음을 추가하십시오.
eval `keychain --eval id_rsa`
나는 많은 시도를했고 마침내 효과가 있었던 해결책은 암호를 빈 문자열로 바꾸는 것이 었습니다.
ssh-keygen -p
exit
것이 트릭입니다.