Jenkins配置Publish over SSH连Ansible容器报USERAUTH fail如何解决
Jenkins Publish over SSH插件报USERAUTH fail解决方案(容器内CLI可正常SSH连通场景)
该报错属于SSH认证阶段失败,和网络连通性无关——既然已经在Jenkins容器命令行验证过同私钥可正常连接Ansible容器,问题必然出在插件配置与命令行SSH环境的差异上,按以下优先级排查即可:
- 私钥格式不兼容
命令行自带的OpenSSH客户端支持OPENSSH、PEM等多种私钥格式,但低版本Publish over SSH插件仅支持PEM格式的RSA私钥。如果你的私钥开头为-----BEGIN OPENSSH PRIVATE KEY-----,插件无法正常解析私钥内容,会直接触发认证失败。
修复方式:生成PEM格式的兼容密钥对,执行命令时加-m PEM参数:ssh-keygen -m PEM -t rsa -b 4096 -f ~/.ssh/jenkins_to_ansible
将生成的公钥重新追加到Ansible容器对应用户的~/.ssh/authorized_keys文件中,再把PEM格式私钥完整复制到插件配置的密钥输入框——注意必须完整包含开头、结尾的分隔线,不要多带空格、空行或者多余注释。 - 插件配置参数错配
- 必须填写正确的远程连接用户名:命令行连接时你会显式指定用户(比如
ssh root@ansible-host),如果插件配置里的Username字段留空,插件会默认用Jenkins进程的运行用户发起连接,和你命令行使用的用户不一致就会认证失败。 - 若采用全局配置粘贴私钥的方式,不要勾选"Use password authentication, or use a different key"选项,否则插件会忽略你粘贴的私钥内容,转而找路径下的密钥或者走密码认证。
- 注意全局配置和任务级配置的优先级:如果任务里单独重写了SSH服务器配置,会直接覆盖全局参数,要确保任务级配置的密钥、用户名和你验证过的参数一致。
- 必须填写正确的远程连接用户名:命令行连接时你会显式指定用户(比如
- SSH加密算法不兼容
新版本OpenSSH服务端默认禁用了ssh-rsa加密算法,1.24版本以下的Publish over SSH插件没有适配新算法,即使密钥正确也会报认证失败。
修复方式二选一即可:- 直接升级Publish over SSH插件到1.24及以上版本,新版本已支持新版OpenSSH的加密算法
- 在Ansible容器的sshd配置中添加兼容规则,编辑
/etc/ssh/sshd_config追加以下配置:
配置完成后执行PubkeyAcceptedAlgorithms +ssh-rsa HostkeyAlgorithms +ssh-rsasystemctl restart sshd重启SSH服务生效。
- 验证方式
插件全局配置页每个SSH主机条目下方都有Test Configuration按钮,每次修改配置后先点该按钮测试,返回Success即为配置正确,无需跑构建任务验证。如果测试仍失败,可查看Jenkins系统日志中Publish over SSH组件的详细日志,会明确标注是密钥解析失败、算法不匹配还是用户权限问题。
避坑提示:复制私钥时直接通过
cat 私钥文件路径输出内容后全选复制,不要用带格式的编辑器打开私钥后复制,避免引入不可见的特殊字符导致私钥解析失败。
内容的提问来源于stack exchange,提问作者Md. Nasir Uddin
相关产品推荐
相关产品推荐

