SSH 密鑰詳解:生成、認證、密鑰對資訊及更多內容
SSH 密鑰不但可提升安全性,更可實現互聯流程自動化、單點登入(SSO),並滿足現今企業所需的大規模身分與存取管理需求。
甚麼是 SSH 密鑰?
更新於:2025 年 6 月 19 日
SSH 密鑰是 Secure Shell(SSH)協議中使用的安全存取憑證。SSH 密鑰對採用公鑰基礎設施(PKI)技術——這一數碼身分認證與加密領域的黃金標準技術,來提供安全且可擴展的認證方式。
由於 SSH 協議被廣泛用於雲端服務、網絡環境、檔案傳輸工具、配置管理工具及其他依賴電腦的服務中的通訊,大多數機構使用這類基於密鑰的認證方式驗證身分,保護上述服務免遭不當使用或惡意攻擊.
密鑰對——公鑰與私鑰
SSH 密鑰依賴兩個相關但非對稱的密鑰:公鑰和私鑰,二者共同組成密鑰對,作為安全存取憑證使用。私鑰是保密的,僅用戶本人知曉,應當加密並妥善儲存。公鑰可以自由分享給用戶想要連接的任意 SSH 伺服器。這類密鑰通常由機構的 IT 團隊管理,更佳的做法是借助受信任的證書頒發機構(CA)協助,確保密鑰得到安全儲存。
建立數碼身分時,公鑰和私鑰會同步生成,密鑰對透過高強度的公鑰密碼學 算法建立關聯。密鑰生成最常用的數學算法包括Rivest–Shamir–Adleman(RSA,即RSA算法)與橢圓曲線數碼簽署算法(ECDSA),它是 DSA 的橢圓曲線應用實現。
這類算法透過多種計算方式生成不同長度的隨機數字組合,以抵禦暴力破解攻擊。密鑰大小(即位長)是決定防護強度的重要指標。2048位元RSA密鑰或521位元ECDSA密鑰可提供足夠的密碼強度,防止黑客破解算法。
SSH密鑰的運作原理是什麼?
SSH密鑰對用於驗證希望透過SSH協定存取遠端系統的使用者或進程的身份。公鑰由使用者與遠端伺服器共同用於加密訊息:在遠端伺服器端,公鑰儲存於公鑰檔案中;在使用者端,公鑰存放於SSH密鑰管理軟件或使用者電腦的本機檔案內。私鑰僅保留在用於存取遠端伺服器的系統上,用於解密訊息。
當使用者或進程透過SSH客戶端請求連線遠端伺服器時,會啟動質詢-回應流程以完成認證。SSH伺服器偵測到連線請求後,使用雙方共有的公鑰資訊傳送加密的質詢請求;隨後SSH客戶端解密質詢訊息並向伺服器傳回回應。使用者或進程必須正確回應質詢才可取得存取權限。整個質詢-回應流程由SSH客戶端與伺服器自動完成,無需使用者手動操作。
SSH公鑰認證與密碼認證的對比
從高層邏輯來看,SSH密鑰和密碼的作用類似,都是用於控制存取,但兩者的相似性僅止於此。數碼身份需要具備足夠的強度以避免被盜,具備便捷性以實現快速、無中斷的存取,還要具備前瞻性,協助企業提前應對潛在威脅。
密碼過往能夠提供一定程度的安全性,但時至今日其有效性已大不如前。這是因為惡意行為者已經越來越擅長透過互聯網傳輸過程竊取密碼、從儲存倉庫中盜取密碼,以及透過暴力破解攻擊獲取密碼。
人為因素進一步放大了這些安全風險與問題:人們會重複使用密碼、共享密碼,還經常遺忘密碼。這為企業帶來了高昂的成本——不僅包括數據丟失、服務中斷和資料外洩造成的損失,還包括密碼輸入耗時、需要投入大量支援資源,以及必須頻繁重設密碼帶來的營運成本。
借助公開金鑰基礎設施(PKI)的密碼強度與認證機制,SSH密鑰不易受到惡意攻擊;即使伺服器被攻破,合法憑證也不會被外洩。PKI密碼技術持續改良,能夠為身份提供前瞻性防護,抵禦不斷演變的新型威脅。
SSH密鑰認證也比密碼認證更便捷。密鑰會自動啟動認證流程並授予存取權限,將使用者和進程連線到伺服器,使用者無需記住密碼,也不用在存取每個系統時都輸入密碼。
即便如此,您始終應當為SSH私鑰設定密碼保護,或將其儲存在硬件令牌中以增強安全性。
查找SSH密鑰的位置
在使用SSH密鑰之前,您需要先檢查自己的使用者帳戶下是否已有SSH密鑰;如果沒有,則需要建立密鑰。建立SSH密鑰有多種方式,例如使用YubiKey或其他硬件安全方案——這類方式通常安全性最高。而對於基礎配置場景,您可以使用.ssh目錄。
如果選擇使用 .ssh 目錄,可按照以下步驟查找 SSH 密鑰對:
進入個人目錄,查找 SSH 目錄。Linux 和 MacOS 的預設路徑為 ~/.ssh 目錄;Windows 的預設路徑為 C:\Users\<username>\.ssh。
查找名稱類似 id_dsa 或 id_rsa 的兩個檔案:一個帶有 .pub 副檔名,另一個沒有(例如 id_rsa.pub 和 id_rsa)。.pub 檔案是公鑰,另一個是私鑰。公鑰不一定始終存在,因為客戶端無需公鑰即可正常運作。
如果在目錄中未找到這些檔案,或者根本不存在該目錄,則需要建立 SSH 密鑰。
如何生成 SSH 密鑰對
生成 SSH 公鑰/私鑰密鑰對,可手動操作,也可使用自動化數碼證書管理系統完成。
在大多數主流作業系統上均可手動生成並儲存新的 SSH 密鑰。Windows 系統可透過 ssh-keygen 命令列工具或 PuTTy 等 SSH 客戶端生成密鑰;MacOS 和 Linux 系統可透過終端機視窗生成密鑰。
要生成 SSH 密鑰,請完成以下命令列步驟:
輸入密鑰生成命令 $ ssh-keygen -t rsa
輸入用於儲存密鑰的檔案路徑。密鑰通常儲存在 home 目錄或 ~/.ssh/ 目錄下(例如 /home/foldername/.ssh/id_rsa 或 /c/Users/username/.ssh/id_rsa)。確認目標檔案名稱後按Enter鍵。
輸入通行短語,也可留空不設定通行短語。注意:通行短語可為密鑰對提供額外一層密碼保護,但使用者每次使用密鑰對時都需要輸入該通行短語。
密鑰對生成後,下一步是將公鑰部署到遠端伺服器。系統管理員可使用 ssh-copy-id 命令將 SSH 公鑰複製到遠端伺服器的 authorized_keys 檔案中(例如 $ ssh-copy-id username@IP address)。也可以透過安全 shell 命令貼上公鑰(例如 $ cat ~/.ssh/id_rsa.pub | ssh username@IP address "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys")。
完成上述步驟後,即可使用私鑰檔案進行 SSH 身份認證。
配置 SSH
可透過修改伺服器上的系統級配置檔案來配置 SSH,該檔案通常名為 /etc/ssh/sshdc_config。
存取 /etc/ssh/ssh_config 檔案後,可透過該檔案控制哪些用戶、哪些用戶組擁有伺服器的 SSH 存取權限。
同理,本機用戶端配置可在 .ssh/config 檔案中完成。用戶可透過該檔案按主機新增特定配置,包括但不限於為每台伺服器指定使用的密鑰、設定用戶名以及配置 SSH 隧道。
SSH 密鑰管理
妥善的 SSH 密鑰管理對企業至關重要,因為這些密鑰可授予對核心業務系統和數據的存取權限。然而,手動管理密鑰耗時且容易出錯。企業環境中通常儲存着數千甚至數百萬個密鑰,進一步提升了管理複雜度。如果未建立並主動執行配置、發放和註銷相關策略,密鑰提供的安全防護很容易失效。
例如,當已頒發的密鑰不再需要時(比如員工離職的場景),IT人員可能會忘記註銷這些密鑰。這類孤立密鑰幾乎無法被發現,進而帶來風險:它們可能存在於未受到嚴格管控的系統中。如果這些孤立密鑰未受保護,就可能被惡意攻擊者竊取,攻擊者隨後可利用仍處於有效狀態的憑據存取您的核心業務系統和數據。
目前已有借助ssh-agent輔助程式實現的專用SSH密鑰管理解決方案,可完成密鑰的配置下發、部署設定與註銷操作。使用這類解決方案的效果遠優於手動管理,但這種方式需要工作繁忙的IT人員在現有安全與管理解決方案之外,額外使用另一款管理工具。IT團隊應當選用能夠自動管理所有基於公鑰基礎設施(PKI)的數碼證書的集中式證書管理解決方案。採用統一的證書管理方式,可讓IT人員在同一個儀表板中完成全部密鑰管理工作。
