我正在尝试在“通过 SSH 发布”Jenkins 插件中启用 ForwardAgent。这将允许 jenkins 在远程服务器上执行部署、rsync 和 svn+ssh 签出。但 GUI 中没有此选项。
在 /etc/ssh/ssh_config 和 /var/lib/jenkins/.ssh/config 中将 ForwardAgent 设置为 yes,但是当 Jenkins 作业通过 ssh 登录时,远程会话没有在代理中加载密钥。(“无法打开与您的身份验证代理的连接。”)
有没有办法强制 ForwardAgent,或者有更好的方法来做到这一点(通过 Jenkins 从属)?
谢谢您的任何想法,不胜感激!
答案1
我发现这个问题已经一年多没有答案了,但下面是我解决问题的方法。
你要做的是确保运行 jenkins 的用户
- 检查 ssh-agent 是否正在运行(如果没有,则启动它)
- 检查密钥是否已加载(若未加载,则加载一个)
将其放入运行需要转发代理的用户的 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
这里大约 50% 的代码是我从其他地方拿来的,但我不记得该归功于哪里了。这应该是相当可移植的,它的使用不必局限于 jenkins,它应该适用于任何 ssh-agent 转发情况。