Jenkins 作业失败,无法对远程执行 scp,权限被拒绝(公钥、密码)

Posted

技术标签:

【中文标题】Jenkins 作业失败,无法对远程执行 scp,权限被拒绝(公钥、密码)【英文标题】:Jenkins job failed, cannot do scp to remote, Permission denied (publickey,password) 【发布时间】:2021-07-15 16:02:42 【问题描述】:

我需要一点帮助。 在我的 Jenkinsfile 中,我有要执行 shell 的阶段:

sh "sudo scp /home/boris2/webgoat-server-v8.1.0.jar boris3@10.113.80.109:/home/boris3"

但 jenkins 作业失败并输出:权限被拒绝(公钥,密码)

我可以通过 ssh 连接到远程,我可以通过终端执行 scp 命令。 我尝试了很多解决方案,但找不到合适的解决方案。

谁能帮忙?

当我尝试 scp -v 我有这个输出:

OpenSSH_8.2p1 Ubuntu-4ubuntu0.2,OpenSSL 1.1.1f 2020 年 3 月 31 日 debug1:读取配置数据 /etc/ssh/ssh_config debug1:/etc/ssh/ssh_config 第 19 行:包括 /etc/ssh/ssh_config.d/.conf 没有匹配的文件 debug1:/etc/ssh/ssh_config 第 21 行:为 * 应用选项 debug1:连接到 10.113.80.109 [10.113.80.109] 端口 22。 debug1:建立连接。 debug1:身份文件 /root/.ssh/id_rsa 类型 -1 debug1:身份文件/root/.ssh/id_rsa-cert type -1 debug1:身份文件 /root/.ssh/id_dsa 类型 -1 debug1:身份文件 /root/.ssh/id_dsa-cert type -1 debug1:身份文件 /root/.ssh/id_ecdsa 类型 -1 debug1:身份文件/root/.ssh/id_ecdsa-cert type -1 debug1:身份文件 /root/.ssh/id_ecdsa_sk 类型 -1 debug1:身份文件/root/.ssh/id_ecdsa_sk-cert type -1 debug1:身份文件/root/.ssh/id_ed25519 type -1 debug1:身份文件/root/.ssh/id_ed25519-cert type -1 debug1:身份文件/root/.ssh/id_ed25519_sk type -1 debug1:身份文件/root/.ssh/id_ed25519_sk-cert type -1 debug1:身份文件 /root/.ssh/id_xmss 类型 -1 debug1:身份文件/root/.ssh/id_xmss-cert type -1 debug1:本地版本字符串 SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.2 debug1:远程协议版本2.0,远程软件版本OpenSSH_8.2p1 Ubuntu-4ubuntu0.2 debug1: match: OpenSSH_8.2p1 Ubuntu-4ubuntu0.2 pat OpenSSH compat 0x04000000 debug1:以 'boris3' 身份向 10.113.80.109:22 进行身份验证 debug1: SSH2_MSG_KEXINIT 已发送 debug1:收到 SSH2_MSG_KEXINIT 调试1:kex:算法:curve25519-sha256 debug1:kex:主机密钥算法:ecdsa-sha2-nistp256 调试1:kex:服务器->客户端密码:chacha20-poly1305@openssh.com MAC:压缩:无 调试1:kex:客户端->服务器密码:chacha20-poly1305@openssh.com MAC:压缩:无 debug1:期待 SSH2_MSG_KEX_ECDH_REPLY debug1:服务器主机密钥:ecdsa-sha2-nistp256 SHA256:Sr+ta5yB6J7Kz9FlJoZBy/W3jb0hBeZv4BHcJuDvsE8 debug1:主机 '10.113.80.109' 是已知的并且与 ECDSA 主机密钥匹配。 debug1:在 /root/.ssh/known_hosts:2 中找到密钥 debug1:在 134217728 个块后重新生成密钥 debug1: SSH2_MSG_NEWKEYS 已发送 debug1:期待 SSH2_MSG_NEWKEYS debug1:收到 SSH2_MSG_NEWKEYS debug1:在 134217728 个块之后重新键入 debug1:将尝试密钥:/root/.ssh/id_rsa debug1:将尝试密钥:/root/.ssh/id_dsa debug1:将尝试密钥:/root/.ssh/id_ecdsa debug1:将尝试密钥:/root/.ssh/id_ecdsa_sk debug1:将尝试密钥:/root/.ssh/id_ed25519 debug1:将尝试密钥:/root/.ssh/id_ed25519_sk debug1:将尝试密钥:/root/.ssh/id_xmss debug1:收到 SSH2_MSG_EXT_INFO 调试1:kex_input_ext_info:server-sig-algs= debug1:收到 SSH2_MSG_SERVICE_ACCEPT debug1:可以继续的身份验证:公钥,密码 debug1:下一个认证方式:publickey debug1:尝试私钥:/root/.ssh/id_rsa debug1:尝试私钥:/root/.ssh/id_dsa debug1:尝试私钥:/root/.ssh/id_ecdsa debug1:尝试私钥:/root/.ssh/id_ecdsa_sk debug1:尝试私钥:/root/.ssh/id_ed25519 debug1:尝试私钥:/root/.ssh/id_ed25519_sk debug1:尝试私钥:/root/.ssh/id_xmss debug1:下一个认证方式:密码 debug1: read_passphrase: 无法打开 /dev/tty: 没有这样的设备或地址 debug1:可以继续的身份验证:公钥,密码 权限被拒绝,请重试。 debug1: read_passphrase: 无法打开 /dev/tty: 没有这样的设备或地址 debug1:可以继续的身份验证:公钥,密码 权限被拒绝,请重试。 debug1: read_passphrase: 无法打开 /dev/tty: 没有这样的设备或地址 debug1:可以继续的身份验证:公钥,密码 debug1:没有更多的身份验证方法可以尝试。 boris3@10.113.80.109:权限被拒绝(公钥,密码)。

【问题讨论】:

“我尝试了很多解决方案,但找不到合适的解决方案” 并没有告诉我们任何您所做的尝试。 改进您的问题!对于您的问题,您能否举例说明代码?这种做法将大大改善这个问题。 是的,我明白了,很抱歉。我试图在远程机器(boris3)上更改我的文件夹的权限,试图将 jenkins 用户添加到主机和远程上的 sudoers 文件中......不记得所有的事情 【参考方案1】:

您可以尝试 scp -v 来查看正在使用哪些 ssh 密钥进行通信。 如果您能够连接到远程计算机 - 正如您所说 - 但不是作为 jenkins 用户,请确保 $JENKINS_HOME 目录包含 .ssh/ 目录您需要与远程计算机通信的特定 ssh 密钥。

另外我不认为 sudo 是 scp 工作所必需的。

【讨论】:

我试图更改 jenkins 的主目录,以便 jenkins 用户拥有所有权限,但仍然出现错误:debug1: read_passphrase: can't open /dev/tty: No such device or address debug1:可以继续的身份验证:publickey,password debug1:没有更多的身份验证方法可以尝试。 boris3@10.113.80.109:权限被拒绝(公钥,密码)。 同样在我的新 Jenkins_home 目录中,我没有 .ssh/ 目录。现在如何生成 ssh 密钥以及我应该使用哪个用户?

以上是关于Jenkins 作业失败,无法对远程执行 scp,权限被拒绝(公钥、密码)的主要内容,如果未能解决你的问题,请参考以下文章

jenkins执行shell脚本,使用scp免密传输失败问题

jenkins 2:用ssh agent插件在pipeline里实现scp和远程执行命令

撤销远程机器中的分发证书后,Jenkins 工作无法正常工作

无法在jenkins中使用变量参数调用远程参数化作业。

即使 ROBOCOPY 命令在 BAT 脚本中成功执行,JENKINS 作业也会失败

如何在Jenkins作业执行中包含域用户