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)客戶端到伺服器:客戶端傳送資料時,拿伺服器的公鑰加密後送出。伺服器接收後,用伺服器的私鑰解密。