SSH建立連線的過程

Amei1314發表於2016-08-05

1.     伺服器建立公鑰檔: 每一次啟動 sshd 服務時,該服務會主動去找 /etc/ssh/ssh_host* 的檔案,若剛剛安裝完ssh軟體時,由於沒有這些公鑰檔案,通過/etc/init.d/sshd restart 的時候會自動產生這些公鑰檔案。但是有時候可能沒有/etc/init.d/sshd,這是需要ssh-keygen去計算出這些需要的公鑰檔案,同時也會計算出伺服器自己需要的私鑰檔;

因為沒有公鑰檔案所以,啟動時發生錯誤

/usr/sbin/sshd
Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Could not load host key: /etc/ssh/ssh_host_ed25519_key
#這說明沒有/etc/ssh/ssh_host*相關的檔案

解決辦法:

#ssh-keygen 中的引數 -q 表示以quiet方式執行,也就是不輸出執行情況。 -t 表示生成的host key 的型別
[root@f795f10ac377 hadoop]# ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''
[root@f795f10ac377 hadoop]# ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
[root@f795f10ac377 hadoop]# ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key  -N ''
Generating public/private dsa key pair.
Your identification has been saved in /etc/ssh/ssh_host_ed25519_key.
Your public key has been saved in /etc/ssh/ssh_host_ed25519_key.pub.
The key fingerprint is:
d4:8a:c2:e0:75:cf:fc:2b:46:b2:8a:b4:d9:a2:8b:7a root@f795f10ac377
The key's randomart image is:
+--[ DSA 1024]----+
|                 |
|         .       |
|  . . . . .      |
| . + . * .       |
|  . o . S        |
|     .. ..       |
|  .    +  .      |
|..E=  . o  .     |
|*++.o. . ..      |
+-----------------+


2.     客戶端主動聯機要求: 若客戶端想要聯機到 ssh 伺服器,則需要使用適當的客戶端程式來聯機,包括 ssh, pietty 等客戶端程式;
3.     伺服器傳送公鑰檔給客戶端: 接收到客戶端的要求後,伺服器便將第一個步驟取得的公鑰檔案傳送給客戶端使用 (此時應是明碼傳送,反正公鑰本來就是給大家使用的!);
4.     客戶端記錄/比對伺服器的公鑰資料及隨機計算自己的公私鑰: 若客戶端第一次連線到此伺服器,則會將伺服器的公鑰資料記錄到客戶端的使用者家目錄內的 ~/.ssh/known_hosts 。若是已經記錄過該伺服器的公鑰資料,則客戶端會去比對此次接收到的與之前的記錄是否有差異。若接受此公鑰資料, 則開始計算客戶端自己的公私鑰資料;
5.     回傳客戶端的公鑰資料到伺服器端: 使用者將自己的公鑰傳送給伺服器。此時伺服器:『具有伺服器的私鑰與客戶端的公鑰』,而客戶端則是: 『具有伺服器的公鑰以及客戶端自己的私鑰』,你會看到,在此次聯機的伺服器與客戶端的金鑰系統 (公鑰+私鑰) 並不一樣,所以才稱為非對稱式金鑰系統喔。
6.     開始雙向加解密: (1)伺服器到客戶端:伺服器傳送資料時,拿使用者的公鑰加密後送出。客戶端接收後,用自己的私鑰解密; (2)客戶端到伺服器:客戶端傳送資料時,拿伺服器的公鑰加密後送出。伺服器接收後,用伺服器的私鑰解密。

相關文章