如何解决Jenkins 作业失败,无法对远程执行 scp,权限被拒绝公钥,密码
我几乎不需要帮助。 在我的 Jenkinsfile 中,我有一个要执行 shell 的阶段:
sh "sudo scp /home/boris2/webgoat-server-v8.1.0.jar boris3@10.113.80.109:/home/boris3"
但詹金斯工作失败并输出:权限被拒绝(公钥,密码)
我可以通过 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 类型-1
debug1:身份文件/root/.ssh/id_ed25519-cert type -1
debug1:身份文件/root/.ssh/id_ed25519_sk 类型-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
debug1:kex:算法:curve25519-sha256
debug1:kex:主机密钥算法:ecdsa-sha2-nistp256
debug1:kex:服务器->客户端密码:chacha20-poly1305@openssh.com MAC:压缩:无
debug1: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
debug1: kex_input_ext_info: server-sig-algs=
解决方法
您可以尝试 scp -v 以查看正在使用哪些 ssh 密钥进行通信。
如果您能够连接到远程机器 - 正如您所说 - 但不是作为 jenkins 用户,请确保 $JENKINS_HOME 目录包含 .ssh/ 目录和与远程机器通信所需的特定 ssh 密钥。
另外,我不认为 sudo 是 scp 工作所必需的。