我找到一篇文章(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
publickey
和keyboard-interactive
to之間沒有逗號/etc/ssh/sshd_config
。所有其他設定都不必更改(只要配置與給定的 howtogeek 教程相同)。