翻譯文章,原文:Understanding SSH workflow[1]

Telnet用于與遠程服務器通信。但是,Telnet并不是一種安全的通信協議,因為它不使用任何安全機制,并且以純文本形式(包括密碼)在網絡/互聯網上傳輸數據,因此任何人都可以嗅探數據包以獲取重要信息。因此,為了克服這個問題,SSH誕生了。現在,讓我們繼續了解SSH。
什么是SSH?
SSH,也稱為安全外殼程序或安全套接字外殼程序,是一種網絡協議,可為管理員提供一種訪問遠程計算機的安全方式。SSH在兩方(客戶端和服務器)之間建立了加密保護的連接,對每一方進行身份驗證,并來回傳遞命令和輸出。
?

SSH是怎么工作的?
SSH協議使用對稱加密,非對稱加密和哈希來確保信息的傳輸。客戶端和服務器之間的SSH連接分為三個階段:
1.客戶端驗證服務器2.生成會話密鑰以加密所有通信3.客戶端認證
現在,我將在不同的部分中討論這些階段。
1.服務器驗證
客戶端啟動與服務器的SSH連接。服務器偵聽默認端口22(可以更改此端口)以進行SSH連接。此時,將驗證服務器身份。有兩種情況:
1.如果客戶端是第一次訪問服務器,則要求客戶端通過驗證服務器的公共密鑰來手動認證服務器。服務器的公共密鑰可以使用 ssh-keyscan 命令找到,也可以在其他位置找到(WHERE?google!)。一旦密鑰被驗證,服務器信息就會添加到客戶端計算機~/.ssh目錄中的known_hosts文件中。 known_hosts文件包含有關客戶端所有已驗證服務器的信息。
2.如果客戶端不是第一次訪問服務器,則將服務器的身份與known_hosts文件中先前記錄的信息進行匹配以進行驗證。

2.生成會話密鑰
驗證服務器后,雙方使用稱為 Diffie-Hellman[2] 算法的某種版本協商會話密鑰。該算法的設計方式是,雙方在會話密鑰的生成中均會做出同等的貢獻。生成的會話密鑰是共享對稱密鑰,即,相同的密鑰用于加密和解密。
3.客戶端認證
最后階段涉及客戶端的身份驗證。使用SSH密鑰對進行身份驗證。顧名思義,SSH密鑰對只不過是用于兩個不同目的的兩個密鑰對。一種是用于加密數據并可以自由共享的公鑰。另一個是私鑰,用于解密數據,并且永遠不會與任何人共享。
建立對稱加密后,將對客戶端進行身份驗證,如下所示:
1.客戶端首先向服務器發送要驗證的密鑰對的ID。
2.服務器檢查客戶端嘗試登錄的帳戶的authorized_keys文件中的密鑰ID。
3.如果在文件中找到具有匹配ID的公鑰,則服務器將生成一個隨機數,并使用該公鑰對數字進行加密并發送此加密的消息。
4.如果客戶端具有正確的私鑰,它將解密該消息以獲得服務器生成的隨機數
5.客戶端將獲得的隨機數與共享會話密鑰結合在一起,并計算該值的MD5哈希值。
6.然后,客戶端將此MD5哈希發送回服務器,作為對加密號碼消息的答復。
7.服務器使用相同的共享會話密鑰和發送給客戶端的原始號碼自行計算MD5值。它將自己的計算結果與客戶端發回的計算結果進行比較。如果這兩個值匹配,則證明該客戶端擁有私鑰,并且該客戶端已通過身份驗證
密鑰的不對稱允許對客戶端進行身份驗證,因為客戶端只有在具有正確的關聯私鑰的情況下才能解密消息。

結論
該博客的主要思想是幫助讀者了解什么是ssh以及用戶嘗試登錄到遠程服務器時發生的情況。
References
[1] Understanding SSH workflow: https://medium.com/@Magical_Mudit/understanding-ssh-workflow-66a0e8d4bf65
[2] Diffie-Hellman: https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange