当前位置:网站首页>ssh工作流程及原理
ssh工作流程及原理
2022-06-27 12:04:00 【小时候不乖的】
SSH(Secure Shell Protocol,安全的壳程序协议),它可以通过数据包加密技术将等待传输的数据包加密后再传输到网络上。ssh协议本身提供两个服务器功能:一个是类似telnet的远程连接使用shell的服务器;另一个就是类似ftp服务的sftp-server,提供更安全的ftp服务。
1、连接加密技术简介
目前常见的网络数据包加密技术通常是通过“非对称密钥系统”来处理的。主要通过两把不一样的公钥与私钥来进行加密与解密的过程。
公钥(public key):提供给远程主机进行数据加密的行为,所有人都可获得你的公钥来将数据加密。
私钥(private key):远程主机使用你的公钥加密的数据,在本地端就能够使用私钥来进行解密。私钥只有自己拥有。
SSH工作过程:在整个通讯过程中,为实现SSH的安全连接,服务端与客户端要经历如下五个阶段:
| 版本号协商阶段 | SSH目前包括SSH1和SSH2两个版本,双方通过版本协商确定使用的版本 |
| 密钥和算法协商阶段 | SSH支持多种加密算法,双方根据本端和对端支持的算法,协商出最终使用的算法 |
| 认证阶段 | SSH客户端向服务器端发起认证请求,服务器端对客户端进行认证 |
| 会话请求阶段 | 认证通过后,客户端向服务器端发送会话请求 |
| 交互会话阶段 | 会话请求通过后,服务器端和客户端进行信息的交互 |
一、版本协商阶段
1、 服务器端打开端口22,等待客户端连接;
2、 客户端向服务器端发起TCP初始连接请求,TCP连接建立后,服务器向客户端发送第一个报文,包括版本标志字符串,格式为“SSH-<主协议版本号>.<次协议版本号>.<软件版本号>”,协议版本号由主版本号和次版本号组成,软件版本号主要是为调试使用。
3、 客户端收到报文后,解析该数据包,如果服务器的协议版本号比自己的低,且客户端能支持服务器端的低版本,就使用服务器端的低版本协议号,否则使用自己的协议版本号。
4、 客户端回应服务器一个报文,包含了客户端决定使用的协议版本号。服务器比较客户端发来的版本号,决定是否能同客户端一起工作。如果协商成功,则进入密钥和算法协商阶段,否则服务器断开TCP连接。
说明:上述报文都是采用明文方式传输。
二、密钥和算法协商阶段
1、 服务器端和客户端分别发送算法协商报文给对端,报文中包含自己支持的公钥算法列表、加密算法列表、MAC(Message Authentication Code,消息验证码)算法列表、压缩算法列表等等。
2、 服务器端和客户端根据对端和本端支持的算法列表得出最终使用的算法。
3、 服务器端和客户端利用DH交换(Diffie-Hellman Exchange)算法、主机密钥对等参数,生成会话密钥和会话ID。
由此,服务器端和客户端就取得了相同的会话密钥和会话ID。对于后续传输的数据,两端都会使用会话密钥进行加密和解密,保证了数据传送的安全。在认证阶段,两端会使用会话用于认证过程。
会话密钥的生成:
1、 客户端需要使用适当的客户端程序来请求连接服务器,服务器将服务器的公钥发送给客户端。(服务器的公钥产生过程:服务器每次启动sshd服务时,该服务会主动去找/etc/ssh/ssh_host*文件,若系统刚装完,由于没有这些公钥文件,因此sshd会主动去计算出这些需要的公钥文件,同时也会计算出服务器自己所需要的私钥文件。)
2、 服务器生成会话ID,并将会话ID发给客户端。
3、 若客户端第一次连接到此服务器,则会将服务器的公钥数据记录到客户端的用户主目录内的~/.ssh/known_hosts。若是已经记录过该服务器的公钥数据,则客户端会去比对此次接收到的与之前的记录是否有差异。客户端生成会话密钥,并用服务器的公钥加密后,发送给服务器。
**4、**服务器用自己的私钥将收到的数据解密,获得会话密钥。
5、 服务器和客户端都知道了会话密钥,以后的传输都将被会话密钥加密。
三、认证阶段
SSH提供两种认证方法:
1、 基于口令的认证(password认证):客户端向服务器发出password认证请求,将用户名和密码加密后发送给服务器,服务器将该信息解密后得到用户名和密码的明文,与设备上保存的用户名和密码进行比较,并返回认证成功或失败消息。
2、 基于密钥的认证(publickey认证):客户端产生一对公共密钥,将公钥保存到将要登录的服务器上的那个账号的家目录的.ssh/authorized_keys文件中。认证阶段:客户端首先将公钥传给服务器端。服务器端收到公钥后会与本地该账号家目录下的authorized_keys中的公钥进行对比,如果不相同,则认证失败;否则服务端生成一段随机字符串,并先后用客户端公钥和会话密钥对其加密,发送给客户端。客户端收到后将解密后的随机字符串用会话密钥发送给服务器。如果发回的字符串与服务器端之前生成的一样,则认证通过,否则,认证失败。
注:服务器端对客户端进行认证,如果认证失败,则向客户端发送认证失败消息,其中包含可以再次认证的方法列表。客户端从认证方法列表中选取一种认证方法再次进行认证,该过程反复进行。直到认证成功或者认证次数达到上限,服务器关闭连接为止。
实例
[[email protected] ~]# ssh-keygen -t rsa #可选dsa/ecdsa/ed25519/rsa/rsa1
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): #默认存储路径,不需要输入,直接回车
Enter passphrase (empty for no passphrase): #不需要密码,直接回车
Enter same passphrase again: #直接回车
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:IKIZhQjwslma218g/E7u3OQPjogvvZtmsfoZcRtDkXQ [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|*...o.E |
|oo .o |
|o + o . |
| % o . . |
|B + = S |
| o.= = |
|..oo+ + |
|..=@ B . |
|oBO+B +.. |
+----[SHA256]-----+
切换到cd /root/.ssh/
[[email protected] .ssh]# pwd
/root/.ssh
[[email protected] .ssh]# ls -l
total 12
-rw-------. 1 root root 1811 Jan 10 22:38 id_rsa
-rw-r--r--. 1 root root 391 Jan 10 22:38 id_rsa.pub
-rw-r--r--. 1 root root 177 Jan 10 22:15 known_hosts
id_rsa: 客户端的私钥
id_rsa.pub: 客户端的公钥
边栏推荐
猜你喜欢

In 2021, the global carbon graphite brush revenue is about US $2366million, and it is expected to reach US $2701.8 million in 2028

Microservice splitting

【On nacos】快速上手 Nacos

Neo4j:入门基础(一)之安装与使用

picocli-入门

面试突击60:什么情况会导致 MySQL 索引失效?

行业洞察 | 新零售业态下,品牌电商应如何重塑增长?

秒云荣获《2022爱分析 · IT运维厂商全景报告》智能运维AIOps市场代表厂商

2022ciscn central China Web

Operators are also important if you want to learn the C language well
随机推荐
Hands on API development
Getting started with go web programming: validators
log4j的详情配置
【On nacos】快速上手 Nacos
MapReduce原理剖析(深入源码)
Detailed configuration of log4j
ACL 2022 | 中科院提出TAMT:TAMT:通过下游任务无关掩码训练搜索可迁移的BERT子网络
threejs的环境光+点光源+平行光源+球面光 以及hepler理解+阴影()
R language dplyr package arrange function sorts dataframe data, sorts dataframe data through multiple data columns, specifies the first field to be sorted in descending order, and does not specify the
alibaba jarslink
聊聊 Go 语言与云原生技术
Shell script learning notes
一个有趣的网络掩码的实验
如何修改 node_modules 里的文件
C# wpf 实现撤销重做功能
动态规划【四】(计数类dp)例题:整数划分
The GLM function of R language is used to build a binary logistic regression model (the family parameter is binomial), and the AIC function is used to compare the AIC values of the two models (simple
What is the TCP 3-time handshake process?
C # WPF realizes undo redo function
Thinkphp6 interface limits user access frequency