• 解决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]]

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

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

  • 相关阅读:
    网站开发感悟
    jQuery之字体大小的设置
    jQuery之load方法
    jQuery之get方法
    MongoVUE的使用
    jQuery之ajax删除
    jQuery之选项卡的实现
    jQuery之简单的表单验证
    jQuery滑动效果实例
    jQuery之下拉框左右选择
  • 原文地址:https://www.cnblogs.com/jying/p/15963137.html
Copyright © 2020-2023  润新知