• linux使用ssh实现免密登陆


    需求

    Jenkins部署的时候需要登陆到部署机执行shell脚本,然后采用ssh免密登陆。

    具体步骤

    (1)、客户端首先向服务器发送要对其进行身份验证的密钥对的用户名。
    (2)、服务器检查客户端尝试登录用户帐户的下authorized_keys文件。
    (3)、如果在文件中找到具有匹配公钥,则服务器生成随机数并使用公钥加密该随机数。并该加密消息发送给客户端。
    (4)、如果客户端利用自己的私钥解密消息(如果可以的话),从而显示原始数。
    (5)、客户端将解密的原始数和用于加密通信的共享会话密钥组合,计算他们的哈希值。客户端将该哈希值发回服务器,作为回应。
    (6)、服务器使用相同的共享会话密钥和此前(步骤4)发送给客户端的原始编号来自行计算哈希值。将计算结果和客户端发回的哈希值对比。如果这两个值匹配,则证明客户端拥有私钥并且客户端已经过身份验证。

    操作流程

    客户端创建公钥私钥,然后将公钥放到被登陆机的指定目录下。

    比如:
    我的仓库服务器是A,用来拉代码和编译,需要登陆到执行服务器B。

    1. 服务器A生成公钥私钥
    ssh-keygen -t rsa  
    //rsa可以省略,因为是默认值
    
    • 1
    • 2

    执行后会生成两个文件:id_rsa、id_rsa.pub文件,前者是私钥,后者是公钥。

    1. 将id_rsa.pub文件复制到服务器B的指定目录
    目录:/root/.ssh/
    文件名:authorized_keys 
    方法1:
    ssh-copy-id -i ~/.ssh/id_rsa.pub root@主机IP
    
    方法2:
    
    1) 在服务器A上创建authorized_keys文件并将公钥追加到该文件。
    cd /root/.ssh
    cat id_rsa.pub >> authorized_keys
    chmod 600 authorized_keys 
    //修改文件权限为600,该文件有规定如果属组其他人出现可写则文件就不会生效
    
    2) 在服务器A指定用户家目录下创建 .ssh 目录(这里在root用户下创建,因为要使用密钥登陆到root用户)
    mkdir .ssh
    chmod 700 .ssh 
    //将目录权限改为700该目录的权限必须是700才有效
    
    3) 将登录机创建的authorized_keys文件拷贝到被登录机,使用scp(自己下载了再传上去也行,注意文件权限即可)
    scp authorized_keys root@服务器地址:/root/.ssh/
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    应用到Jenkins

    安装插件:Publish over SSH
    在这里插入图片描述
    在配置中找到位置,填上私钥。(就是服务器A /root/.ssh/ 下生成的那个)

    在这里插入图片描述
    然后填上服务器的IP(hostname)、登录用户名即可测试。

  • 相关阅读:
    引用参考文献[1,2]或者[1-3]
    Neo4j aura 官方网站快速入门新手教精读-从官方教程学习知识图谱
    【分段传输】c#使用IAsyncEnumerable实现流式分段传输
    Spring tool suite4新建maven web项目
    Aspose.slides企业案例:Oracle 咨询服务实施了 Excel 和 PowerPoint 格式的按需可定制报告系统
    深入解析大数据分析:技术挑战、应用场景与未来趋势
    Enhancing Quality for HEVC Compressed Videos
    Spine动画加载优化思路 之 Spine动画加载问题
    怎样给蔬菜图片抠图?看看这个马路中央的紫茄子
    一、Unity环境安装
  • 原文地址:https://blog.csdn.net/happy_teemo/article/details/125491713