SSH(Secure Shell)是在Linux及其他類Unix系統中廣泛應用的一種網路協議,主要用於安全的遠端登入和命令執行。SSH的設計目標是在不安全的網路環境下,為使用者提供資料機密性、完整性以及操作認證等安全保障。
SSH是如何工作的:
SSH協議採用客戶端-伺服器架構,其工作流程大致分為以下幾個步驟:
-
連線建立:
- 使用者在本地機器上執行SSH客戶端(如OpenSSH),指定要連線的目標伺服器地址和埠號(預設為22)。
- 客戶端向伺服器發起TCP連線請求。
-
版本協商與金鑰交換:
- 客戶端和服務端相互傳送版本資訊並協商使用的SSH協議版本和加密套件。
- 之後進行金鑰交換過程,確保後續通訊的加密基礎。現代SSH(主要是SSHv2)通常採用Diffie-Hellman金鑰交換演算法或者ECDH等演算法來建立共享的秘密金鑰。
-
身份驗證:
- 客戶端需要驗證伺服器的身份,防止中間人攻擊。這通常是透過檢查伺服器提供的公鑰指紋,首次連線時,客戶端可能會詢問使用者是否信任此伺服器的公鑰。
- 使用者身份驗證有多種方式:
- 基於口令的認證: 使用者輸入在伺服器上的使用者名稱和密碼,密碼經過加密後傳送給伺服器驗證。
- 基於公鑰認證(Public Key Authentication): 客戶端擁有一個私鑰和對應的公鑰,私鑰存放在本地,公鑰則存放在伺服器的
~/.ssh/authorized_keys
檔案中。當客戶端嘗試連線時,使用私鑰證明自己的身份,無需手動輸入密碼。
-
建立加密通道:
- 在雙方身份驗證完成後,利用之前協商好的加密演算法和金鑰,建立起一條加密的隧道或通道。
- 該通道用於所有後續的互動,包括命令執行、檔案傳輸等,確保資料在傳輸過程中無法被監聽或篡改。
-
會話操作:
- 一旦安全通道建立起來,使用者就可以像操作本地終端一樣,執行遠端伺服器上的命令、傳輸檔案(如透過SCP或SFTP)、啟動圖形介面應用程式(X11轉發)等操作。
綜上所述,SSH透過一系列安全措施,實現了使用者能夠安全地遠端控制伺服器、管理檔案,同時確保了資料傳輸和互動的安全性和隱私性。