一、先看下SSH免密登录使用到的工具和生成的文件

工具:ssh-keygen用于生成秘钥文件,其中秘钥分为公钥和私钥、ssh-copy-id用于复制公钥文件到被控制机。

文件:ssh-keygen生成的秘钥文件有两个,放在~/.ssh/,id_rsa为私钥、id_rsa.pub为公钥

被控制机文件:通过ssh-copy-id复制的公钥在被控制机这个文件里,~/.ssh/authorized_keys

id_rsa.pub公钥如下示例:

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAvSkEZ0fKXRqQ/DkjCfsAETsQgV8OR/RVQmwBk/J5IWoknf8Dr
y5kOs+1bnx9zaf8oIcVuXf0jRxTccLBOXiReFJE4aD2rWO33sqA0M4qP1ESYhsU4yokRA0IMDJ62JUv2cWVJg
GpeQriol2t7mH8E6aB8OiJ+NgRbh6+/0LbtQs40VA2+W5PtaBwT4sjv9LOHIdzQcsEeCM8MIHqmXHst7/JuVI
i7wLCxB7Ur8qtwZ2/Ii8Ckjfo6mikWmSh6mRMq9qn0FkMkPCcpm8o4f1zJWOuf+RnjPpopFTqIa8JssMHJMuQ
cCm3EHDkBHjLk/SkidWOzqOtSvUeGKieWiijuw== username@localhost.localdomain

id_rsa私钥如下示例:

-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA3zh+wHRki5ysBPcrDxL/MGI/vO4aYW6nTgShJKoNny79wkyY
UhhPukkYtRhAxflmqwSvs1kUmYNRrUN1MEeJHEVdZvkQeyLHf1gCkaw1G5Gi/Ijv
WcdKZ4SoUJj3bBYjuH93oIInQCeKSJ26DkiK/yyZuU4P82SZej78dVceJQZf/GzD
uFQYm4CLFDPHq+/Vf/OtedBSvGST/c+gj3O97G9RV+kIfbZJjrR8SKky/vwKUtsv
5b8bQX6c5ZV8GXiDr3TwExljMW+OE9P6yXiYv5MrF6qrh6GevoZxKVy1xs/GTn1N
VBxevqK8haEjTIqDhuAyXtb7BRa1UuY2Q9G1gwIDAQABAoIBAG67uO1CECrOAuvH
rZ2hv+RBqPrRZ1bULLzgQQxOK8m+5vV/R8TZ+Jsh7dbQfDl5unu2LG8dDsIEyfzY
zQaxRgw3QNl3Try3CR5cC5I2SnYtrhv21j3ERl3KCjFJYNxGs1uwKCkAx/XkZ44U
aJrzU7i4aF3rorAMRLLHEjgninW0obQhfUKOZCMQBRtWWdzFz+/qfX7aiO/3Iz0W
bF5A8ygn20C25zBNYQUAzF1L2xnMRvTELsa8v/k+bnVc0E8BnFJ5SwmK7dalL8w4
b3wvtDTXv1betE/4+fWB8tbkGaqslrhbo0SS8IZNXCYS3kRDC7AcCszP5Alqm4hI
PTFkHiECgYEA8Tdo4h+Hw7/wR+bJJjexxuD5nHrFtHa+h9UTQFB6MlIChDPGuvfB
oHlScErIsrLIzIgjpFnnb4nEtc6/IYzyPDma0VTypLij5yuSTk8rPgnwm9qZBXmo
j0spHW8ti5qdsNzFKnpX8x5RPD8+ROr67aee7LVOOf6mWnwcHShMDnECgYEA7Oa9
NOn+DUz7rIAr3wuouV5Zc7CC4ij0SNYdKaoH24SrF2QSXbgQIZiV1z/KZyJefyHS
J+PpcfvRz7BD3RT4Ze7d3Tz1aqtjLkM100b15FDUQKYKUvvUDUgKhskFEos0VSvG
/WwyAXSqFTqXJqxzUzskTa3sLvaPLtaqTlMcpTMCgYBKHdVrTXbgzdQds6rwxEIq
sqvfydV/qtDGWdEtfMzfM1W0m1gf0Mq87SpIeKIMTmTme5pAAKPdIL7BgkI2I+G2
YZjRY0GfHWC3QisVRrwpttIogVVtWkFRri127tdWwu5bDqrCb48gk5swYNpYQL9T
UKLDZr4fkcA5o1LcHqqn8QKBgQCZ661hdOr5D1yyDrDygavFjPTHwxa3BO77aAqY
qH3kdgWH9CAuvknU2kP5D9xdOCp3paza+C0UPw5qR9dADMD70cBbX6EBBowxYb/W
H1PiXVYbDwbENhTn8DfOrUtbahC9ie0HeUXgRkG/+0p7+S4RFOsYgXlkZhRP1W/f
5gZFmwKBgQDPuKUBsGuOpnaV+8q0wtjbKtHbTLSlAGNnnRDIs/5xBms1onekFpIU
f3TawKYayf2IN/PLygeoa3PC8Rd6KHCy0Y7A2TD/sxMgNiPaz4L4KoWMcIk+rzuc
OMIvyyXX2qUTxVagF6aaE65dQ+GGxr4pUS3YJhPizpA6dPp8Apbd4w==
-----END RSA PRIVATE KEY-----

二、验证过程

不是说在某个用户下免密之后,就必须要在特定的用户下进行登录,其实这个不太符合实际;应该说SSH免密登录时会找当前用户下的~/.ssh/目录下的文件进行验证登录,所以不一定要存在文件和指定的用户,只要有内容即可,通常SSH免密登录时指定私钥。

下面是详细的登录过程:

在建立连接的时候, 涉及到2对密钥, 其中一对为准备阶段产生并分配好的密钥对, 另一对为服务器在接收到一个连接请求时生成的密钥对. 为了讲述方便, 我们将这两组密钥对表示如下

Symbol Description
PubC 客户端密钥对应的公钥
PrvC 客户端握有的私钥
PubS 服务器端产生的公钥
PrvS 服务器端产生的私钥

1、认证

①服务器生成随机数(称之为challenge) x, 并用 PubC 加密后生成结果 s(x), 发送给客户端.

②客户端使用 PrvC 解密 s(x) 得到 x, 再将xPubS加密发送回服务器端.

③服务器端使用PrvS解密得到x, 进行核对, 如果正确则链接正式成立.

2、通信加密

在请求连接前, 服务器端和客户端拥有的密钥为

1
2
3
Server          |           Client
--------------------------------------
PubC | PrvC

①客户端发出申请. 服务器会产生一组 session 密钥对, 即PubSPrvS.

此时服务器端和客户端拥有的密钥如下所示

1
2
3
4
5
Server           |           Client
-------------------------------------
PubC | PrvC
PubS |
PrvS |

②服务器端利用客户端的公钥PubC对 session 公钥PubS进行加密后发送给客户端.

③客户端用自己的密钥PrvC解密信息,得到 session 公钥PubS

1
2
3
4
5
Server           |           Client
-------------------------------------
PubC | PubS
PrvS | PrvC
PubS |

④之后的数据交互,都通过对方方公钥加密,对方收到信息后,用其私钥解密,实现安全加密过程。

流程如下所示:

三、SSH登录指定私钥

从上面的原理可以分析出,在通讯时,并不需要控制机使用公钥做什么,而被控制机需要使用到公钥,再就是控制机主要使用到的是私钥,所以SSH可以指定私钥进行远程登录。

命令如下:-i指定了私钥文件

ssh -i /root/.ssh/id_rsa root@192.168.1.2

参考(以上内容部分转自下面文章):

https://fancyseeker.github.io/2013/12/30/ssh_overview/

https://www.jianshu.com/p/0f9b72d691c2

https://www.jianshu.com/p/2b5ab0e9e8b1

https://segmentfault.com/a/1190000012484646

https://www.waitig.com/ssh%E5%85%8D%E5%AF%86%E7%99%BB%E5%BD%95%E5%AE%9E%E7%8E%B0%E5%8A%9E%E6%B3%95%E5%8F%8A%E5%8E%9F%E7%90%86.html

https://www.cnblogs.com/scofi/p/6617394.html

https://blog.csdn.net/qq_26907251/article/details/78804367

Linux的SSH免密登录认证过程研究的更多相关文章

  1. Linux 双向 SSH 免密登录

    原理 双向,顾名思义,双方互通,此处的意思是多台 linux 两两免密登录.双向比单向多了些操作,单向只需把某一个linux的公钥发送给其他linux即可,而双向要实现集群中的每一台机器都保存其他所有 ...

  2. linux上ssh免密登录原理及实现

    因为我的服务器集群需要回收日志到中央进行统一处理,所以需要建立ssh互信关系实现免密登录.关于ssh的使用大家可能都很熟悉了,我们今天主要来讲下ssh连接和免密登录的原理. scp 传输文件 scp( ...

  3. linux 远程ssh免密登录

    写在前面 先说说需求: 我们平时开发.运维操作linux过程中经常需要实现将远程文件拷贝到本地或者本地文件拷贝到远程:执行远程命令等操作:这个时候建立ssh免密登录应该是一个比较好的选择: 原理 在l ...

  4. 【Linux】ssh免密登录

    一.ssh免密配置 ssh 无密码登录要使用公钥与私钥.linux下可以用用ssh-keygen生成公钥/私钥对,下面我以CentOS为例.有机器A(192.168.1.155),B(192.168. ...

  5. linux服务器ssh免密登录

    环境:两台服务器,Park01.Park02,配置ssh免密登录 在Park01执行:ssh-keygen 然后一直回车 生成节点的公钥和私钥,生成的文件会自动放在/root/.ssh目录下   然后 ...

  6. Linux入门——SSH免密登录

    SSH免密登录 1.简介 SSH是一种网络协议,用于计算机之间的加密登录. 本文针对的实现是OpenSSH,它是自由软件,应用非常广泛. 2.初始化公钥私钥 有rsa,dsa两种加密方式,生成的公钥私 ...

  7. Linux机器间ssh免密登录

    前言 一台Linux机器通过ssh的方式连接别的机器或通过scp的方式传输文件,都需要输入密码. 为了解决每次输入密码的困扰,可采用添加密钥的方式实现. 实现过程 源服务器A,目标服务器B. 1.在源 ...

  8. Linux的SSH免密登录(一)

    1.从cp/scp命令出发 scp(secure copy)是linux系统下基于ssh登录进行安全的远程文件拷贝的命令. 1. 传递文件到远程 scp local_file remote_usern ...

  9. linux 配置ssh免密登录

    一.SSH概念(百度) SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:SSH 为建立在应用层基础上的安全协议.SSH 是目 ...

随机推荐

  1. S5PV210初始化系统时钟

    S5PV210初始化系统时钟 S5PV210时钟体系S5PV210中包含3大类时钟domain,分别是主系统时钟domain (简称MSYS,下面将使用简称来进行相关讲解).显示相关的时钟domain ...

  2. python-pandas 高级功能(通过学习kaggle案例总结)

    方法.iterrows()遍历循环df中的元素. for index,row in df.iterrows(): pass 更改df一个元素中的变量值. data1.set_value(index,' ...

  3. urllib处理包的简单使用

    我们可以使用urllib.request.urlopen()这个接口函数就可以打开一个网站,读取打印信息 你可以现在终端使用python from urllib import request if _ ...

  4. wap页面缩放

    html{font-size: 100%;}.in-main{ min-width:320px; max-width:640px; margin:0 auto; font-size:14px; bac ...

  5. java 文件读取的一些方法

    web项目读取日志文件 //得到路径 String appPath = filterConfig.getServletContext().getRealPath("/"); // ...

  6. (八)CXF添加自定义拦截器

    前面我们说到CXF添加内置的拦截器,今天的话,我们来讲下如何添加自定义拦截器: 我们的实例是客户端访问服务端webservice接口要加权限认证. 我们思路先说下.我们可以通过在SOAP消息的Head ...

  7. 你可能不知道的git clean

    git clean是干啥的? git clean可以帮你清理workspace中未被git版本控制的文件,比如临时文件,构建出来的二进制文件. 使用方法 如果你的clean.requireForce项 ...

  8. 步步为营-23-通过GridView实现增删改

    说明:把xml中的数据放入到数据源list中然后显示到gridview中,参考上一节内容 1 UI页面 2创建student类 public class Student { public int ID ...

  9. canvas绘制简易动画

    在canvas画布中制作动画相对来说很简单,实际上就是不断变化的坐标.擦除.重绘的过程 1.使用setInterval方法设置动画的间隔时间. setInterval(code,millisec) s ...

  10. 《Kafka技术内幕》学习笔记

    第一章 Kafka入门 1.1 Kafka流式数据平台 Kafka作为流式数据平台的特点: 消息系统:两种消息模型:队列和发布订阅. 队列模型:将处理工作平均分给消费组中的消费者成员. 发布订阅模型: ...