用於 SSH 登入的公鑰或密碼和 Google 驗證器

用於 SSH 登入的公鑰或密碼和 Google 驗證器

我找到一篇文章(http://www.howtogeek.com/121650/how-to-secure-ssh-with-google-authenticators-two-factor-authentication/)解釋如何配置 OpenSSH 以在成功登入時請求 Google 身份驗證器程式碼。

是否可以設定 OpenSSH 以便發生以下情況:

  • 如果使用者有正確的私鑰登入伺服器,則登入該使用者。
  • 如果使用者沒有允許登入伺服器的私鑰,請向使用者詢問帳戶密碼和 Google 驗證器代碼。

這將很方便(因為在我的電腦上我只需要私鑰)並且安全(因為我可以啟用密碼身份驗證並且安全)。

有什麼辦法可以實現我想要的嗎?

提前致謝。 :)

答案1

絕對可以配置一個sshd來要求任何一個有效的密鑰對或者使用 HOTP(每次請求時使用新的一次性密碼 (OTP))基於 OATH 的身份驗證 - 我正在這樣做。我相當確定 Google Authenticator 只是另一個 OATH 實作。

我完整的文章可以閱讀http://www.teaparty.net/technotes/yubikey-oath.html,但結果是:

假設您sshd已經設定為允許基於公鑰的身份驗證(大多數是),請將這兩行添加到sshd_config

PasswordAuthentication no
ChallengeResponseAuthentication yes 

安裝pam_auth(這是面向 CentOS 的方式,適用於 x86_64):

yum install pam_oath
ln -s /usr/lib64/security/pam_oath.so /lib64/security/

建立身份驗證檔案/etc/users.oath、模式600、擁有者root:root,並使用以下行填充它:

#type   username        pin     start seed
HOTP    fred            -       123a567890123b567890123c567890123d567890

編輯/etc/pam.d/sshd並新增行

auth required pam_oath.so usersfile=/etc/users.oath window=5 digits=8 

digits=8如果您對 6 位數 HOTP OATH 感到滿意,請跳過這一步。我相信類似的方法可以用於 TOTP OATH(每個新的 OTPn秒),但我使用的是硬體 OATH 令牌而不是軟體令牌,它們是 yubikeys,僅執行 HOTP OATH。

唯一的問題是,當您在沒有提供有效金鑰的情況下 ssh 登入時,它會要求輸入 OATH 程式碼密碼。我無法讓它以相反的方式工作,但決定我不在乎那麼多;提示非常清楚地表明正在請求哪個令牌。

答案2

您需要附加:

AuthenticationMethods publickey keyboard-interactive

publickeykeyboard-interactiveto之間沒有逗號/etc/ssh/sshd_config。所有其他設定都不必更改(只要配置與給定的 howtogeek 教程相同)。

相關內容