SSH(Secure Shell)提供了幾種不同的認證方式,其中兩種最常見的方式是密碼認證和密鑰認證。以下是它們的詳細介紹:
-
密碼認證:
- 原理:用戶在連接時輸入用戶名和密碼,然后將密碼傳輸到遠程服務器進行驗證。如果密碼驗證成功,用戶將被授權訪問遠程服務器。
- 優點:密碼認證是最簡單的認證方式,用戶只需記住密碼即可。
- 缺點:密碼需要在網絡上傳輸,可能受到網絡嗅探和中間人攻擊的威脅。密碼也容易受到暴力破解攻擊,尤其是對于弱密碼。
-
密鑰認證:
- 原理:用戶生成一對密鑰:公鑰和私鑰。公鑰存儲在服務器上的授權文件中,而私鑰存儲在用戶的本地計算機上。當用戶嘗試連接到遠程服務器時,遠程服務器會向用戶發出挑戰,要求提供與公鑰相對應的私鑰。如果提供的私鑰與服務器上存儲的公鑰匹配,用戶將被授權訪問。
- 優點:密鑰認證比密碼認證更安全,因為私鑰存儲在用戶的本地計算機上,不會發送到服務器上。這樣可以避免密碼在網絡上傳輸的安全風險。
- 缺點:密鑰認證需要用戶生成密鑰對,并在首次連接時將公鑰上傳到服務器上,因此可能需要一些額外的配置步驟。如果私鑰丟失或泄露,安全性可能會受到影響。
除了密碼認證和密鑰認證之外,還有其他一些認證方式,如使用單一登錄(SSO)系統、使用基于硬件的令牌、使用多因素認證等。這些認證方式通常用于增強安全性,但不如密碼認證和密鑰認證那樣常見和廣泛使用。
SSH 配置密鑰認證
SSH 默認密碼認證,要配置 SSH 以使用密鑰認證,需要執行以下步驟:
-
生成密鑰對:在本地計算機上生成密鑰對(公鑰和私鑰)。通常使用
ssh-keygen
命令來生成密鑰對。ssh-keygen -t rsa -b 4096
這將生成一個 RSA 類型的密鑰對,私鑰保存在
~/.ssh/id_rsa
,公鑰保存在~/.ssh/id_rsa.pub
。 -
將公鑰上傳到遠程服務器:將本地計算機上生成的公鑰上傳到遠程服務器的
~/.ssh/authorized_keys
文件中。如果
authorized_keys
文件不存在,你可以創建它。確保設置正確的權限,只有所有者可以讀寫該文件。cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
替換
username
為你在遠程服務器上的用戶名,remote_host
為遠程服務器的地址。 -
配置 SSH 服務器:確保 SSH 服務器配置允許使用密鑰認證。在 SSH 服務器上打開
/etc/ssh/sshd_config
文件,并確保以下配置項啟用(取消注釋):PubkeyAuthentication yes
這將啟用公鑰認證。
-
重啟 SSH 服務:重啟 SSH 服務以使配置生效。
sudo systemctl restart ssh
完成上述步驟后,你應該可以使用密鑰進行 SSH 認證了。連接到遠程服務器時,SSH 客戶端會自動嘗試使用私鑰進行認證,如果私鑰與遠程服務器上的公鑰匹配,連接將成功建立。