Node.js 如何在Jenkins管道中使用SSH?
我有一些使用Jenkins管道模型定义的Jenkins作业,它构建NPM项目。我使用Docker容器构建这些项目(使用带有 只需Node.js+npm+纱线) 构建结果包含在我使用Node.js 如何在Jenkins管道中使用SSH?,node.js,git,jenkins,ssh,jenkins-pipeline,Node.js,Git,Jenkins,Ssh,Jenkins Pipeline,我有一些使用Jenkins管道模型定义的Jenkins作业,它构建NPM项目。我使用Docker容器构建这些项目(使用带有 只需Node.js+npm+纱线) 构建结果包含在我使用zip管道命令压缩的dist/文件夹中 我想使用SSH/SCP(带有私钥身份验证)将此ZIP文件复制到另一台服务器。我的私钥已添加到Jenkins环境(凭据管理器),但当我使用Docker容器时,无法建立SSH连接 我试图添加代理{label'master'}以使用master Jenkins节点进行文件传输,但它似乎
zip
管道命令压缩的dist/
文件夹中
我想使用SSH/SCP(带有私钥身份验证)将此ZIP文件复制到另一台服务器。我的私钥已添加到Jenkins环境(凭据管理器),但当我使用Docker容器时,无法建立SSH连接
我试图添加代理{label'master'}
以使用master Jenkins节点进行文件传输,但它似乎创建了一个干净的工作区,使用新的Git fetch,并且没有我构建的文件
在我尝试了SSH代理插件之后,我得到了以下输出:
Identity added: /srv/jenkins3/workspace/myjob-TFD@tmp/private_key_370451445598243031.key (rsa w/o comment)
[ssh-agent] Started.
[myjob-TFD] Running shell script
+ scp -r dist test@myremotehost:/var/www/xxx
$ docker exec bfda17664965b14281eef8670b34f83e0ff60218b04cfa56ba3c0ab23d94d035 env SSH_AGENT_PID=1424 SSH_AUTH_SOCK=/tmp/ssh-k658r0O76Yqb/agent.1419 ssh-agent -k
unset SSH_AUTH_SOCK;
unset SSH_AGENT_PID;
echo Agent pid 1424 killed;
[ssh-agent] Stopped.
Host key verification failed.
lost connection
如何添加授权的远程主机?使用SSH代理插件:
使用此插件时,您可以使用全局凭据。要将远程主机添加到已知主机,并希望能够处理您的错误,请尝试以Jenkins用户的身份手动将ssh从Jenkins主机连接到目标主机 进入安装Jenkins的主机。类型
sudo su jenkins
现在像使用ssh或scp一样使用
ssh username@server
您应该得到如下提示:
无法建立主机“服务器(ip)”的真实性。
ECDSA密钥指纹是SHA256:一些奇怪的字符串。
是否确实要继续连接(是/否)
输入yes。服务器将被永久添加为已知主机。甚至不用麻烦传递密码,只需按住Ctrl+C并尝试运行Jenkins作业。就像@haschibaschi建议的那样,我也使用ssh代理插件。我需要在远程计算机上使用我的个人UID凭据,因为它没有任何UID Jenkins帐户。代码如下所示(例如,使用my personal UID=“myuid”和remote server hostname=“non_jenkins\u svr”: ID e4fbd939-914a-41ed-92d9-8eededfb9243是在我创建全局域凭据条目后由Jenkins凭据管理器生成的
创建凭据条目后,可以在凭据页面的“ID”列下找到ID。创建条目时,我选择了类型“SSH用户名和私钥”(“种类”字段),并在主机
非jenkins\u svr
上的myuid帐户下复制了为此目的而创建的RSA私钥。我也有类似问题。我没有使用标签“master”,并且我确定文件传输在从机之间工作,当我这样做时:
步骤1-在远程主机服务器中创建SSH密钥,包括授权密钥的密钥
步骤2-在Jenkins中使用SSH密钥创建凭据,使用来自远程主机的私钥
将以下步骤添加到管道中:
stage ('Deploy') {
steps{
sshagent(credentials : ['use-the-id-from-credential-generated-by-jenkins']) {
sh 'ssh -o StrictHostKeyChecking=no user@hostname.com uptime'
sh 'ssh -v user@hostname.com'
sh 'scp ./source/filename user@hostname.com:/remotehost/target'
}
}
}
我尝试了您指定的插件,并因此更新了问题。如何在管道脚本中使用SSH插件的凭据?为什么拒绝投票?这是更新问题的正确答案。我也有同样的问题,sshagent插件在容器中无法使用凭据并删除sshagent插件
,使用凭据([sshUserPrivateKey(credentialsId:'ssh credentials id',keyFileVariable:'keyfile')]{sh“mkdir-p~/.ssh&&cp${keyfile}~/.ssh/id_rsa“other_stuff}
使用@SZMER进行备份时说:
stage ('Deploy') {
steps{
sshagent(credentials : ['use-the-id-from-credential-generated-by-jenkins']) {
sh 'ssh -o StrictHostKeyChecking=no user@hostname.com uptime'
sh 'ssh -v user@hostname.com'
sh 'scp ./source/filename user@hostname.com:/remotehost/target'
}
}
}