Linux系统SSH通信过程详解

这篇文章来为你们介绍远程链接 Linux 服务器,通常使用 Linux 系统的人都习惯借助第三方远程链接,由于直接在 Linux 系统内操做很不方便,它不能进行上拉页面,这就很让人难受。能够远程链接的软件不少,有 Xshell、putty、CRT 等等,可是我比较喜欢和习惯使用 Xshell。shell

说到远程链接,那不得不说的一个协议就是 SSH 了,SSH 是 secure shell 的缩写,是一个安全远程管理的服务。它是一个创建在应用层上的安全远程管理协议,算是目前较为可靠的一个传输协议,专门为远程登录会话和其余网络服务器提供安全性,利用 ssh 协议能够有效防止远程管理过程当中的信息泄露问题。这个协议可用于大多数的 UNIX 操做系统中,它可以实现字符界面的远程登陆管理,它默认使用 22 端口,采用密文的形式在网络中传输资源,相对于经过明文传输的 Telnet 协议,具备更高的安全性。安全

SSH 提供了基于帐户密码(口令)和密钥对两种登录验证方式,这二者都是经过密文传输数据的。服务器

帐户密码验证过程:网络

  1. Client → Server:链接请求
  2. Server → Client:发送公钥
  3. Client → Server:用公钥将密码信息加密,发送
  4. Server → Client:用密钥解密并验证消息,信息合法则创建链接通信帐户密码登陆认证过程当中传输的是用户的帐户名和密码,密码具备足够的复杂度才能具备更高的安全性。

Linux 主机之间的远程管理工具是 ssh 命令,全部咱们直接使用 ssh 进行远程登陆。dom

格式:ssh 用户名@IP 地址

ssh root@192.168.88.20 ssh

密钥对验证过程:ide

  1. Client → Server:发送链接请求,并将公钥发送;
  2. Server → Client:验证本地公钥和发送过来的公钥,若是两钥相同,生成一段 challenge 并将公钥加密,回送 ;
  3. Client → Server:用私钥解密,再 challenge 返回给服务器
  4. Server → Client: 验证两端 challenge,相同则创建链接

首先须要在 Client 上建立一对密钥,而且要把公钥放在须要访问的 Server 上;当 Client 须要链接 Server 时,Client 端的软件就会向 Server 端发出登陆请求,请求使用密 钥对中的公钥进行安全验证; Server 收到请求以后,会在该用户的家目录下查询公钥文件,拿 Client 发送过来的公钥和本身家目录下的公钥进行比较;若是两个公钥一致,server 就会用公钥加密 “challenge(质疑)”,并把它发送给 Client 软件。Client 收到加密内容以后,使用本地的私钥进行解密,再把解密结果发送给 Server 端,Server 端验证成功后,容许登录。工具

注意:若对比结果失败,则 Server 端会通知 Client 端此公钥未在本机注册,没法验证登陆。测试

关于用户名密码验证登陆

Linux 主机之间的远程管理工具是 ssh 命令,因此咱们直接使用 ssh 进行远程登陆。加密

格式:ssh 用户名@IP地址

image-20201119005618387

能够看到咱们在 client 主机上远程登陆 server 端,是很容易的,只要知道服务器的密码,就能够完成登陆操做。

密钥对验证登陆

1. 首先客户端生成密钥对文件

[root@client ~]$ ssh-keygen -t rsa -b 2048
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:fl3B1MUmxWWNTdOfad8oOyjGaaU+mas/ayawa4ptiJ8 root@client
The key's randomart image is:
+---[RSA 2048]----+
|             .X@|
|             oo.X|
|             oo+|
|               =.|
|       S     o.o|
|   . . ..... o|
|..   o ..*...o   |
|oo..o . #.. o   |
|.oEo...X=*   .   |
+----[SHA256]-----+

ssh-keygen 是生成密钥对的工具,-t 选项是用来指定加密类型的,此处采用 rsa 加密类型,-b 选项是用来指定密钥对加密长度的。

关于上述生成密钥对时的两个询问解释以下:

询问 1:执行过程当中会询问保存位置,通常默认保存在当前用户家目录下的 .ssh/ 目录下;

询问 2:是否对密钥文件进行加密

  • 加密:若加密,则在调用密钥文件时须要先验证密钥的密码,密码正确才能使用密钥文件;
  • 不加密:若不加密,则密钥文件能够直接被调用,整个登录验证过程无需输入任何密码,即为免密登陆;

2. 将公钥文件上传到服务器

这里使用 ssh-copy-id 命令进行公钥的上传。

[root@client ~]$ ssh-copy-id root@.71.74.
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@.71.74.'s password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@.71.74.'"
and check to make sure that only the key(s) you wanted were added.

image-20201119010643600

通过对比客户端和服务端公钥内容相同,能够看到密钥上传成功。密钥上传成功以后,咱们尝试在客户端上登陆服务器:

image-20201119010907349

能够看到,此次登陆咱们并无输入密码,直接就登陆成功。关于上述演示说明:由于使用的公网服务器进行测试,因此部分敏感地方有作打码,可是这并不妨碍读者阅读,其实这个实验仍是蛮有意思的,感兴趣的朋友能够尝试练习。

相关文章
相关标签/搜索