詹金斯的转发代理

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)?

感谢您的任何想法,非常感谢!

Mat*_*ark 1

我发现这个问题已经一年多了没有答案,但这是我解决这个问题的方法。

你想要做的是确保运行 jenkins 的用户

  1. 检查 ssh-agent 是否正在运行(如果没有,则启动它)
  2. 检查是否加载了密钥(如果没有,则加载一个)

将其放入运行需要转发代理的用户的 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 转发情况下工作。