Назад | Перейти на главную страницу

ForwardAgent в Дженкинсе

Я пытаюсь включить ForwardAgent в плагине Jenkins «Публикация через SSH». Это позволило бы Дженкинсу выполнять развертывания, проверки rsyncs и svn + ssh на удаленных серверах. Но в графическом интерфейсе нет возможности для этого.

ForwardAgent имеет значение yes в / etc / ssh / ssh_config и в /var/lib/jenkins/.ssh/config, но когда задания Jenkins входят в систему через ssh, удаленный сеанс не имеет ключа, загруженного в агент. («Не удалось установить соединение с вашим агентом аутентификации.»)

Есть ли способ заставить ForwardAgent или лучший способ сделать это (через подчиненное устройство Jenkins)?

Спасибо за любые идеи, очень ценим!

Я вижу, что на этот вопрос не было ответа больше года, но вот как я решил проблему.

Что вы хотите сделать, так это убедиться, что пользователь, который запускает jenkins

  1. проверяет, запущен ли ssh-agent (если нет, запустите)
  2. проверяет, загружен ли ключ (если нет, загрузите его)

Поместите это в свой ~ / .bash_profile для пользователя, который запускает jenkins пользователя, которому нужно перенаправить агент, чтобы убедиться, что он работает с каждой новой оболочкой:

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.