web-dev-qa-db-ja.com

JenkinsのForwardAgent

「SSH経由で公開」JenkinsプラグインでForwardAgentを有効にしようとしています。これにより、jenkinsはリモートサーバーでデプロイメント、rsync、およびsvn + sshチェックアウトを実行できるようになります。しかし、GUIにはこれに対するオプションはありません。

ForwardAgentは/ etc/ssh/ssh_configおよび/var/lib/jenkins/.ssh/configでyesに設定されていますが、Jenkinsジョブがsshを介してログインする場合、リモートセッションのエージェントにキーが読み込まれていません。 (「認証エージェントへの接続を開くことができませんでした。」)

ForwardAgentを強制する方法、またはこれを行うためのより良い方法(Jenkinsスレーブを介して)はありますか?

アイデアをありがとう、大いに感謝します!

6
r_2

この質問には1年以上回答がないようですが、これが問題の解決方法です。

あなたがしたいことは、jenkinsを実行しているユーザーが

  1. ssh-agentが実行されているかどうかを確認します(実行されていない場合は起動します)
  2. キーがロードされているかどうかを確認します(ロードされていない場合はロードします)

エージェントを転送する必要があるユーザーのjenkinsを実行するユーザーの〜/ .bash_profileにこれを入れて、新しいシェルごとに実行されるようにします。

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転送の状況で機能するはずです。

1
MattPark