為什麼SSH密碼認證存在安全風險?

為什麼SSH密碼認證存在安全風險?

大多數 OpenSSH 設定指南建議停用密碼身份驗證,轉而使用基於金鑰的身份驗證。但在我看來,密碼身份驗證有一個顯著的優勢:無需密鑰即可從任何地方進行連接的能力。如果始終使用強密碼,這應該不會造成安全風險。還是應該這樣?

答案1

基於密碼或基於金鑰的身份驗證各有利弊。

例如,在某些情況下,基於金鑰的身份驗證是較少的比密碼驗證更安全。在其他情況下,基於密碼的安全性較差。在某些情況下,一種方法更方便,而在其他情況下,則不太方便。

這一切都可以歸結為:當您進行基於金鑰的身份驗證時,您必須使用密碼保護您的金鑰。除非您運行 ssh-agent(ssh-agent 讓您無需每次都輸入密碼),否則您在便利性方面一無所獲。安全性是有爭議的:攻擊媒介現在從伺服器轉移到您、您的帳戶或您的個人計算機,(...) - 這些可能更容易被破壞,也可能不容易被破壞。

做決定時要跳出框框思考。您在安全方面的獲得或損失取決於您的環境的其餘部分和其他措施。

編輯:哦,剛剛看到你在談論家庭伺服器。我也遇到過同樣的情況,「密碼」或「帶有鑰匙的USB記憶棒」總是伴隨著我?我選擇了前者將 SSH 監聽連接埠更改為不同於 22 的連接埠。

答案2

與密碼登入相比,使用 ssh 密鑰確實有一個獨特的功能:您可以指定允許的命令。這可以透過修改~/.ssh/authorized_keys伺服器上的檔案來完成。

例如,

command="/usr/local/bin/your_backup_script.sh", ssh-rsa auiosfSAFfAFDFJL1234214DFAfDFa...

只允許使用該特定鍵的命令“/usr/local/bin/your_backup_script.sh”。

您也可以指定密鑰允許的主機:

from="yourclient,yourotherclient", ssh-rsa auiosfSAFfAFDFJL1234214DFAfDFa...

或將兩者結合起來:

from="yourbackupserver", command="/usr/local/bin/your_backup_script.sh", ssh-rsa auiosfSAFfAFDFJL1234214DFAfDFa...

使用金鑰,您還可以向某些使用者(例如顧問)授予對伺服器的臨時存取權限,而無需透露該特定帳戶的密碼。顧問完成工作後,可以刪除臨時密鑰。

答案3

僅允許來自網路內部的密碼身份驗證,您可以兩全其美。將以下內容新增到您的末尾sshd_config

PasswordAuthentication no
Match Address 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
    PasswordAuthentication yes

答案4

ssh 金鑰可防止中間人對您的密碼進行攻擊。

當您嘗試使用金鑰登入時,伺服器將根據您的公鑰建構一個質詢並將其發送給您的用戶端。這將解密它並構造一個適當的回應來發送。

您的私鑰永遠不會發送到伺服器,並且監聽的任何人都無法執行任何操作,除了攔截該單一會話。

有了密碼,他們就會獲得您的憑證。

我的解決方案是在 USB 金鑰上的加密分割區上擁有合適格式的便攜式 ssh 金鑰。這使我能夠:
在鑰匙丟失時輕鬆收回鑰匙。
限制它允許我訪問哪些服務器
並仍然隨身攜帶

雖然安裝掛載軟體很痛苦(truecrypt)

相關內容