220
阿裏雲
雲服務器 ECS Linux SSH 連接交互過程簡介__遠程登錄 (SSH)_Linux操作運維問題_雲服務器 ECS-阿裏雲
,注意:,本文相關配置及說明已在, CentOS 6.5 64 ,位操作係統中進行過測試。其它類型及版本操作係統配置可能有所差異,具體情況請參閱相應操作係統官方文檔。
,SSH ,服務在進行數據傳輸前,會先進行密鑰交換和協商確認。完成後再對後續數據進行加密傳輸,以提高安全性。本文先對, ,SSH ,服務所采用的非對稱加密技術進行簡要介紹,然後對, ,SSH ,連接過程中的相關交互,及關聯文件進行說明。
,非對稱加密技術
,SSH ,服務基於非對稱加密,(,public-key cryptography,,也稱公開密鑰加密)技術,實現數據加密傳輸。該技術,會生成一對數學相關的密鑰,其中一個,用於對數據進行加密,而且隻能用於加密,而另一個隻能用於解密。使用加密密鑰,加密後的數據,隻能用對應的解密密鑰才能解密。而且,隻知道其中一個密鑰,無法計算出另一個。因此,如果公開了一對密鑰中的一個,並不會危害到另一個的秘密性質。通常把公開的密鑰稱為,公鑰,(,public key,),,而不公開的密鑰稱為,私鑰,(,private key,)。
,如果公開的是解密密鑰,該場景用於,客戶端驗證持有私鑰一方發布的數據或文件的完整性、準確性,以防止數據篡改。相應的密鑰稱為數字簽名(數字證書)。如果公開的是加密密鑰,該場景用於客戶給私鑰所有者上傳數據,稱為公開密鑰加密。, ,SSH ,服務基於該場景實現。
,與對稱密鑰加密相比,非對稱加密的優點在於不存在共享的通用密鑰。由於解密用的私鑰無需發送給任何用戶,所以可以避免密鑰被劫持或篡改。而加密用的公鑰即便被劫持或篡改,如果沒有與其匹配的私鑰,也無法解密數據。所以,截獲的公鑰是沒有任何用處的。
,當前,,SSH,主要采用, ,RSA ,,算法,(協議, ,V2 ,默認算法)和, ,DSA ,,算法,(協議, ,V1 ,僅支持該算法)來實現非對稱加密技術。
,連接交互過程
,SSH ,服務建立連接時的相關交互過程,如下,SSH ,服務連接交互示意圖 ,所示:
,
,連接過程中的相關交互步驟,詳細說明如下。
,服務端準備階段
,服務端在每次啟動 ,SSH ,服務時,都會自動檢查 ,/etc/ssh/ ,目錄下相關密鑰文件的有效性。如果相關文件檢查發現異常,則會導致服務啟動失敗,並拋出相應錯誤信息。 ,如果文件相關不存在,則會自動重新創建。
,默認創建的相關文件及用途說明如下:
ll /etc/ssh/
-rw-------. 1 root root 125811 Aug 13 2015 moduli → 用於 DH-GEX 算法
-rw-r--r--. 1 root root 2047 Aug 13 2015 ssh_config → SSH 客戶端配置文件
-rw-------. 1 root root 3879 Aug 13 2015 sshd_config → SSH 服務配置文件
-rw-------. 1 root root 672 May 20 14:22 ssh_host_dsa_key → DSA 算法私鑰
-rw-r--r--. 1 root root 590 May 20 14:22 ssh_host_dsa_key.pub → DSA 算法公鑰
-rw-------. 1 root root 963 May 20 14:22 ssh_host_key → SSH V1 版RSA 算法私鑰
-rw-r--r--. 1 root root 627 May 20 14:22 ssh_host_key.pub → SSH V1 版 RSA 算法公鑰
-rw-------. 1 root root 1675 May 20 14:22 ssh_host_rsa_key → SSH V2 版 RSA 算法私鑰
-rw-r--r--. 1 root root 382 May 20 14:22 ssh_host_rsa_key.pub → SSH V2 版 RSA 算法公鑰
,非對稱加密協商
,服務端 ,SSH ,服務正常運行後,客戶端連接時,進行如下交互:
- ,客戶端向服務端發送連接請求。
,客戶端通過 ,SSH ,工具連接服務端。相關信息通過明文發送。 - ,,,服務端返回公鑰信息:
,根據客戶端所使用的服務協議版本及算法設置,返回相應公鑰信息。比如,默認情況下,客戶端通過 ,SSH V2 ,版協議,基於 ,RSA ,算法建立連接,則服務端將 ,ssh_host_rsa_key.pub ,文件中的內容返回客戶端。相關信息通過明文發送。 - ,,,,,客戶端對服務端公鑰信息進行比對和確認:
,客戶端接收到服務端公鑰信息後,會進行如下比對,並讓用戶對相關信息進行確認。- ,如果是首次連接服務端,客戶端會收到類似如下信息,讓用戶確認公鑰指紋的有效性:
The authenticity of host '192.168.0.1 (192.168.0.1)' can't be established. RSA key fingerprint is c2:49:d9:43:74:d5:ed:bc:28:9b:d2:7b:63:94:cf:bc. Are you sure you want to continue connecting (yes/no)?
- ,如果用戶輸入, ,no ,,則連接中斷並報錯(,Host key verification failed,)。
- ,如果用戶輸入, ,yes,,則會將相應的公鑰信息,保存到當前用戶家目錄下, .ssh ,目錄內的, ,known_hosts ,文件中。, ,比如:
cat ~/.ssh/known_hosts IP 明文顯示: 192.168.0.1 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA3sdlboGEgY9buZpkPuygPw0NxAvmxYd0mc3fo2MgP+JqgFC9/9ZXOgDXKJrjE2HKBieJZSPKGncIh+zLxTvmykeJQBXv7i1GiUjW+H3VY69Ge3AdGfCd+XF+Cvi1e+j18zhHnjSzvIBoNpT5cBWWNbw7mNHCwTb0sHAVUkWR4Ck/LM5/rQ09A+m6BLfZJL8CRNGxKTbyINi6o812S+Cy64WqDs1nTpIXp2Bkcpjclb36bFSs9Z/tWNuJl7A//7HNtxMgFGBnE07Ykvvy8s06DUmkyFy8GcXGBpnfdg9utLodfQLFQnKflCQZ110BpQaCWlWPjU9dc4w3XLJ/XQOP4w== IP 做了加密處理: |1|3efXAZ4sNHcUcHamBy4gDriblc8=|8idBhLq9aLl2sfh4KswMsk4sPFI= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwS4DE3hok8RCkxYlTxsexNrNa62e05UGSkoP7ie26DDWjG1Aoc74cCsE4is9p7lEfFUYYlAzeYhPqE/yGf5YxRZUOU2IeFI4cEqo8YZr7edVYpgAq2f2J0zMwk1syenD12lmUPkYA4mMB6it3jxXR5k+H0HZh9YA7mRXkiTjlkAMWirBcnUvtKYRv9LRIr3ikUiPy2gfZO291Ae9zuTsWwEtHQxIpiBgk3vwF2gCUFlX9y//IsMjdQq5prk7x3BjXhUorqgJO1gt1VHW8Xxx9Oe50YF1hi9DuE6VXwyh4xfHTmauRQybwsYafdA3HxrA2od6x9l19D9EH7xHAjDa5w==
- ,如果服務端因重裝係統等因素導致公鑰指紋出現變化,則會直接導致連接失敗(報錯,Host key verification failed,),則需要刪除已保存的條目後再重新連接。, ,相關操作可以參閱 雲服務器 ECS Linux 客戶端 SSH 公鑰指紋不匹配導致 SSH 登錄失敗。
- ,如果之前已經成功連接,而且公鑰指紋對比一致,則會繼續下一步操作。,
- ,如果是首次連接服務端,客戶端會收到類似如下信息,讓用戶確認公鑰指紋的有效性:
-
,客戶端生成臨時密鑰對:
服務端公鑰校驗及確認後,客戶端會生成一對臨時密鑰用於客戶端加密。該密鑰對不會存儲到文件,而是記錄在內存中。每次連接都會重新生成臨時密鑰對。 -
,客戶端發送公鑰信息:
客戶端向服務端,發送前述生成的臨時密鑰對中的公鑰信息。相關信息通過明文發送。
,至此,服務端及客戶端都擁有對方的公鑰和自身的私鑰,所以稱為非對稱加密。
,後續數據交互過程
,後續登錄校驗及正常的數據傳輸,都會通過雙向加密方式進行。相關交互說明如下:
- ,如果服務端需要發送數據給客戶端:
- ,,服務端使用所持有的客戶端公鑰,對需要傳輸的數據進行加密,再發送給客戶端。
- ,,,客戶端收到信息後,使用所持有的自身私鑰解密後獲取數據。
- ,反之,如果客戶端需要發送數據給服務端,也是類似的流程:
- ,,客戶端使用所持有的服務端公鑰,對需要傳輸的數據進行加密,再發送給服務端。
- ,,,服務端收到信息後,使用所持有的自身私鑰解密後獲取數據。
更多信息
- ,公鑰指紋
,由於公鑰一般較長(采用,RSA,算法時長達 ,1024 ,位)。所以,為了簡便起見,通過對其,MD5,計算,生成一個,128,位的字符串用於信息對比。此稱為公鑰指紋。 - ,,,Secure Shell,:,Wikipedia ,上關於 ,SSH ,的介紹和討論。
- ,,,,OpenSSH Manual Pages,:,OpenSSH ,官方使用手冊。
- ,,,,,RSA,:,Wikipedia ,上關於 ,RSA ,算法的介紹。
- ,,,,,,DSA,:,Wikipedia ,上關於, ,DSA ,算法的介紹。
最後更新:2016-07-12 15:24:19
上一篇:
SSH 登錄時出現如下錯誤:Host key verification failed__遠程登錄 (SSH)_Linux操作運維問題_雲服務器 ECS-阿裏雲
下一篇:
雲服務器 ECS Linux SSH 基於密鑰交換的自動登錄原理簡介及配置說明__遠程登錄 (SSH)_Linux操作運維問題_雲服務器 ECS-阿裏雲
項目管理__手冊_用戶操作指南_大數據開發套件-阿裏雲
MQ Java SDK 日誌找不到問題分析__技術分享_技術運維問題_消息隊列 MQ-阿裏雲
DeleteRow__API 概覽_API 參考_表格存儲-阿裏雲
日誌合並工具__周邊工具_CDN-阿裏雲
授權服務角色讀日誌__常見問題_產品使用問題_日誌服務-阿裏雲
使用 oss_fdw 讀寫外部數據文本文件__快速入門(PostgreSQL)_雲數據庫 RDS 版-阿裏雲
Check Point “飛天”阿裏雲 vSEC在雲棲大會閃亮登場
查看當前實例數據庫參數運行列表__參數管理_API 參考_雲數據庫 RDS 版-阿裏雲
修改萬網域名 DNS__域名管理接口_API文檔_雲解析-阿裏雲
啟動__Console參考手冊_數據集成-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲