在 openssh 中,我可以指定每次登入嘗試時執行的命令嗎?

在 openssh 中,我可以指定每次登入嘗試時執行的命令嗎?

我收到很多 ssh 登入攻擊,希望減少它們。有什麼方法可以指定 openssh 執行的命令並檢查其返回值,並且僅在該命令返回 0 時才允許登入嘗試?

這背後的原因是我希望能夠擁有更複雜的登入規則,我可以在腳本中表達這些規則,而不是透過簡單的基於文件牆/IP 的規則。

答案1

是的,對於足夠現代的 openssh 有一個技巧:使用 AuthorizedKeysCommand。此設定選項可讓您指定外部命令來檢索 SSH 金鑰。您可以在此放置從 LDAP 檢索 SSH 金鑰之類的邏輯,也可以放置您想要的任何其他邏輯。只要您僅接受基於金鑰的身份驗證,不傳回任何金鑰就會導致身份驗證失敗。

在舊版的 openssh 中,您可以使用 ForceCommand,但這是強制命令身份驗證,而不是執行的命令驗證。然而,它確實適用於基於密碼和金鑰的身份驗證。

如果您想要支援基於密碼的身份驗證並希望插入身份驗證階段,則需要編寫自己的 PAM 模組並使其成為 SSH 身份驗證所需的模組。這不是最簡單的方法,並且不會被要求進行基於金鑰的身份驗證。

如果您只想封鎖身分驗證失敗次數過多的 IP 位址,fail2ban 也可以為您提供協助,無需變更 SSH 設定。

相關內容