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

  • 相关阅读:
    idea 集成 git 后使用的常用命令
    gitlab在项目中创建自己的分支的顺序操作,一整套流程
    Cas 80750-24-9,去硫代生物素 N-羟基琥珀酰亚胺,淡黄色固体
    Github标星35K+超火的Spring Boot实战项目,附超全教程文档
    day3_C++
    JavaWeb过滤器(Filter)详解,是时候该把过滤器彻底搞懂了(万字说明)
    用友U8 crm客户关系管理存在任意文件上传漏洞
    IED设备模型
    使用Flask编写一个最简单的后端接口
    minio拉取的时候报错了
  • 原文地址:https://blog.csdn.net/happy_teemo/article/details/125491713