Node.js 如何在Jenkins管道中使用SSH?

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节点进行文件传输,但它似乎

我有一些使用Jenkins管道模型定义的Jenkins作业,它构建NPM项目。我使用Docker容器构建这些项目(使用带有 只需Node.js+npm+纱线)

构建结果包含在我使用
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'
        }
    }
}