r_2*_*r_2 6 ssh ssh-keys ssh-agent jenkins
我正在尝试在“通过 SSH 发布”Jenkins 插件中启用 ForwardAgent。这将允许 jenkins 在远程服务器上执行部署、rsyncs 和 svn+ssh 检出。但是在 GUI 中没有这个选项。
ForwardAgent 在 /etc/ssh/ssh_config 和 /var/lib/jenkins/.ssh/config 中设置为 yes,但是当 Jenkins 作业通过 ssh 登录时,远程会话没有在代理中加载密钥。(“无法打开与您的身份验证代理的连接。”)
有没有办法强制 ForwardAgent,或者有更好的方法来做到这一点(通过 Jenkins slave)?
感谢您的任何想法,非常感谢!
我发现这个问题已经一年多了没有答案,但这是我解决这个问题的方法。
你想要做的是确保运行 jenkins 的用户
将其放入运行需要转发代理的用户的 jenkins 的用户的 ~/.bash_profile 中,以确保它与每个新 shell 一起运行:
SSH_ENV="$HOME/.ssh/environment"
function start_agent {
echo "Initializing new SSH agent..."
/usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
echo succeeded
chmod 600 "${SSH_ENV}"
. "${SSH_ENV}" > /dev/null
ssh-add .ssh/id_rsa
cat .ssh/id_rsa.pub
}
#Source SSH Settings
if [ -f "${SSH_ENV}" ]
then
. "${SSH_ENV}" > /dev/null
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent > /dev/null || {
start_agent;
}
else
start_agent;
fi
if [ `ssh-add -l | grep "The agent has no identities." | wc -l` == 1 ]
then
ssh-add .ssh/id_rsa
cat .ssh/id_rsa.pub
fi
Run Code Online (Sandbox Code Playgroud)
这里大约 50% 的代码是我从其他地方获取的,但不记得在哪里给出了出处。这应该是相当可移植的,并且它的使用不必限于 jenkins,它应该可以在任何 ssh-agent 转发情况下工作。