Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在bash脚本中添加ssh密钥(jenkins管道)_Bash_Jenkins_Ssh Agent - Fatal编程技术网

在bash脚本中添加ssh密钥(jenkins管道)

在bash脚本中添加ssh密钥(jenkins管道),bash,jenkins,ssh-agent,Bash,Jenkins,Ssh Agent,我有一个Jenkins作业,需要执行shell脚本。它通过ssh密钥连接到远程计算机。以下是管道作业: stage ('Run') { try { sh "chmod +x \$(find . -name '*.sh')" wrap([$class: 'AnsiColorBuildWrapper', 'colorMapName': 'XTerm']) { sh "./run-ansible-p

我有一个Jenkins作业,需要执行shell脚本。它通过ssh密钥连接到远程计算机。以下是管道作业:

    stage ('Run') {
        try {
            sh "chmod +x \$(find . -name '*.sh')"
            wrap([$class: 'AnsiColorBuildWrapper', 'colorMapName': 'XTerm']) {
                sh "./run-ansible-playbook.sh -f ansible-playbook.yml"
            }
etc...
sh文件执行ssh代理和ssh add命令

sshAgentCount=$(pgrep ssh-agent | wc -l)

if [[ $sshAgentCount -eq 0 ]]; then
        echo "# run ssh-agent #"
        eval `ssh-agent -s`
       ssh-add /var/lib/jenkins/id_rsa_ansible
fi
问题是,这有时有效,有时无效。我认为这是因为用户的tty(这里是jenkins)一直在变化,ssh代理进程链接到tty。 我不想总是调用eval
ssh-agent-s
,因为它会导致机器上的内存随着时间的推移而耗尽

此处显示ps aux | grep ssh代理状态:

jenkins   1243  0.0  0.0  11140   320 ?        Ss   17:20   0:00 ssh-agent -s
jenkins   1397  0.0  0.0  11140   320 ?        Ss   17:23   0:00 ssh-agent -s
jenkins   1435  0.0  0.0  11140   320 ?        Ss   17:23   0:00 ssh-agent -s
你有解决这个问题的好办法吗?(仅当需要时才提供一个ssh代理)

非常感谢:)

我认为这是因为用户的tty(这里是jenkins)一直在变化,ssh代理进程链接到tty

否。SSH代理未链接到
tty
。SSH代理连接存储在环境变量
$SSH\u AUTH\u SOCK
中,因此一旦关闭启动
SSH代理的原始shell,您将失去与代理的连接


但是,您可以通过将环境变量存储在文件中并将其加载到下一个shell(如果仍然可用)或类似的东西来保持这种连接。

谢谢您的回答。事实上,它与文件一起工作

但我发现了更简单的方法,在工作结束时终止流程:

# add ssh key
echo "# run ssh-agent #"
eval `ssh-agent -s`
ssh-add /var/lib/jenkins/id_rsa_ansible

work...

kill $SSH_AGENT_PID

Jenkins有一个ssh代理插件,无需直接使用ssh命令即可解决此问题:

节点{
sshagent(凭据:['deploy-dev']){
sh'ssh-o strichostkeychecking=no-l cloudbees 192.168.1.106 uname-a'
}
}