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

  • 相关阅读:
    java毕业设计基于精细化考核的离散数学课程教学目标达成系统Mybatis+系统+数据库+调试部署
    嵌入式分享合集62
    《码出高效:Java开发手册》笔记之二-面向对象
    从需求收集到需求落地,需求分析如何才能更全面?
    音视频的Buffer处理
    Java基础空指针
    李嘉诚人生最大的错误,并非错过阿里华为,而是套现中国投资欧洲
    带头的循环双向链表的简单介绍
    黑马点评(十二) -- UV统计
    使用 Spring Boot Admin 监控应用状态
  • 原文地址:https://blog.csdn.net/happy_teemo/article/details/125491713