linux杂谈之ssh静默产生公钥和私钥

一    ssh-keygen细节

需求:以脚本的方式非交互的产生

ssh-keygen -f ~/.ssh/id_rsa -t rsa -N ''

-t : '指定创建密钥的类型'   -->  '一般是rsa'

-f : '指定保存密钥的文件名' 

-N : '加密' --> ''表示输入密码为空

理解: '对照命令名交互输出来理解'

后续补图

二    再次理解ssh免密原理

ssh原理图

更细节讲解

                          '客户端   <---->    服务端'

 
(1) 客户端(client) 使用 'ssh-keygen' 生成一对密钥:'公钥+私钥'

(2) 将客户端公钥追加到服务器端'对应用户的'~/.ssh/authorizied_key文件中,完成'公钥认证操作'

    ssh-copy-id  '[ -i ~/.ssh/id_rsa.pub ]' 用户@{ip,hostname}

    注意1: 如果'pub公钥不是在默认路径下',需要指定 -i参数

    注意2: 需要知道'远程主机的密码'

(3) 认证完成后,客户端向服务器发送'登陆请求',并传递'客户端公钥'到服务器端,同时会将'服务器的公钥'写到--> 'known_hosts'

    ssh user@ip

    1) 用户'客户端'需要'输入yes'来决定接受这个'远程主机的公钥'

    2) /etc/ssh/ssh_config'客户端配置文件',跳过这个known_hosts的询问机制--> 'StrictHostKeyChecking no' --> '自动化的脚本'

(4) 服务器检索authorizied_key文件,确认该公钥'客户端的公钥'是否存在?

(5) 如果存在该公钥,则'远程主机侧'生成随机数,并用'客户端'该公钥加密,生成公钥加密字符'pubkey(R)'

(6) 服务器端'将加密的公钥字符'传送给'客户端'

(7) 客户端使用'自己的私钥'进行解密-->'得到R'

(8) 服务器和客户端产生通信的时候会产生一个会话id'SessionKey',用MD5对R和SessionKey进行加密,生成摘要'(MD5加密字符串)'

    备注:'会话id是唯一的',确保'不会伪造'

(9) 客户端将'生成的MD5加密字符串'传给服务端

(10)服务器端同样生成'MD5(R,SessionKey)' 加密字符串

(11)服务器侧对比客户端产生的加密字符串,如果相等则认证成功

(12)此时'不用输入密码',即建立连接

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值