• 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)、登录用户名即可测试。

  • 相关阅读:
    使用 Socks5 来劫持 HTTPS(TCP-TLS) 之旅
    全面分析一下前端框架Angular的来龙去脉,分析angular的技术要点和难点,以及详细的语法和使用规则,底层原理-小白进阶之路
    黑客(网络安全)技术速成自学
    CSS中去掉li前面的圆点方法
    【QandA C++】内存泄漏、进程地址空间、堆和栈、内存对齐、大小端和判断、虚拟内存等重点知识汇总
    商城小程序功能
    进程相关知识总结
    『力扣刷题本』:合并两个有序链表(递归解法)
    HCIP(15)
    Python21天学习挑战赛Day3·json标准库
  • 原文地址:https://blog.csdn.net/happy_teemo/article/details/125491713