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

能夠看到,此次登陸咱們並無輸入密碼,直接就登陸成功。關於上述演示說明:由於使用的公網服務器進行測試,因此部分敏感地方有作打碼,可是這並不妨礙讀者閱讀,其實這個實驗仍是蠻有意思的,感興趣的朋友能夠嘗試練習。

相關文章
相關標籤/搜索