解决jenkins配置ssh秘钥登录时的两种异常

在验证jenkins中ssh登录时,如果验证失败,首先应该尝试直接通过ssh命令能否连接成功。

#在配置了公钥私钥的情况下执行:
#ssh -p 你的端口号(很可能不是22) 用户名(一般为root最大权限)@你的ip地址
#比如我的
ssh -p 51000 root@192.168.110.119

网上大多数推荐的复制公钥到目标服务器方式为ssh-copy-id,但该命令要求输入目标服务器密码,有时候我们并不能拿到目标服务器的密码,比如我司的服务器全部迁移到堡垒机上,那我们是没有root密码的,所以无法通过ssh-copy-id命令操作,只好手动复制粘贴到目标服务器的authorized_keys文件。如果发现自己在jenkins容器上生成了秘钥,并将公钥复制粘贴到了要连接的服务器上,但通过ssh直连测试发现仍然提示需要输入密码,那有两种可能:

1、说明复制粘贴的公钥不正确,最大的可能就是直接从控制台复制粘贴的公钥有换行符!!!需要手动删掉换行符才行。

2、.ssh文件夹及其内部文件访问权限不够。

    这个时候可以在远程服务器通过 journalctl --unit=sshd查看日志,然后按shift+G键切换到最新日志节点,如果含有错误:Authentication refused: bad ownership or modes for file /root/.ssh/authorized_keys,说明配置权限不对,这个配置权限不仅是远程服务器的,本地的文件也要设置。

    本来我以为给该文件夹及其文件设置最大权限(777)就行了,结果发现不行,该文件夹很特殊,必须设置700权限才行。

  

    最终设置权限如下成功:

# 先ll查看下对应文件是否是对应权限;
ls -l
chmod 700 /root/.ssh
chmod 700 /root/.ssh/id_rsa
chmod 700 /root/.ssh/id_rsa.pub
chmod 600 authorized_keys
ls -l

 记住一定是本地和远程服务器都配置该权限哦。

 

如果直连能成功,再查找别的原因。

以下错误为对应秘钥格式不被识别:

jenkins.plugins.publish_over.BapPublisherException: Failed to add SSH key. Message [invalid privatekey: [B@2fff36d6]

一种可能是你配置到jenkins里的私钥没有携带起止标志-----BEGIN RSA PRIVATE KEY-----或-----END RSA PRIVATE KEY-----,这两个是要带着的。

如果你是最新版本的docker镜像安装的jenkins容器,那么原因可能是容器内ssh版本太高,生成的私钥格式不被老版本ssh认可。解决方案是手动生成旧格式的秘钥:https://www.cnblogs.com/architectforest/p/13707244.html

ssh-keygen -m PEM -t rsa -b 2048
-m 参数指定密钥的格式,PEM是rsa之前使用的旧格式
-b 指定密钥长度。对于RSA密钥,最小要求768位,默认是2048位。

比如我用的docker镜像安装的jenkins(截止2022.02.12版本),jenkins容器内ssh版本为:OpenSSH_8.4p1 Debian-5, OpenSSL 1.1.1k  25 Mar 2021,而jenkins安装的ssh publish over插件截止2022.03.03最新版本1.24,虽然不知道它对应的ssh版本,但很明显它确实不兼容最新版的ssh。

 


以下错误为对应秘钥验证失败(对应公钥不存在或不正确):

jenkins.plugins.publish_over.BapPublisherException: Failed to connect and initialize SSH connection. Message: [Failed to connect session for config [10.10.201.199]. Message [Auth fail]]

检查配置的公钥是否正确,一般不是私钥的问题。

 

 一般这两个问题解决就可以连接成功了。

 

posted @ 2022-03-04 12:09  一 定 会 去 旅 行  阅读(8112)  评论(0编辑  收藏  举报