我找到了一篇文章(http://www.howtogeek.com/121650/how-to-secure-ssh-with-google-authenticators-two-factor-authentication/) 解释了如何配置 OpenSSH 在成功登录时要求输入 Google Authenticator 代码。
是否可以配置 OpenSSH 以便发生以下情况:
- 如果用户具有正确的私钥来登录服务器,则让用户登录。
- 如果用户没有允许登录服务器的私钥,请向用户询问帐户的密码和 Google Authenticator 代码。
这样会很方便(因为在我的计算机上我只需要私钥)并且很安全(因为我可以保持密码验证启用且安全)。
有什么方法可以实现我的愿望吗?
提前致谢。 :)
答案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
如果您对 6 位 HOTP OATH 感到满意,请跳过此步骤digits=8
。我相信类似的方法可以用于 TOTP OATH(每个n秒),但我使用的是硬件 OATH 令牌而不是软件令牌,它们是 yubikeys,只能进行 HOTP OATH。
唯一的问题是,当你在未提供有效密钥的情况下通过 ssh 登录时,它会要求输入 OATH 代码前密码。我无法让它反过来工作,但我决定不那么在意;提示非常清楚地说明了正在请求哪个令牌。
答案2
您需要附加:
AuthenticationMethods publickey keyboard-interactive
publickey
和keyboard-interactive
之间没有逗号/etc/ssh/sshd_config
。所有其他设置都不必更改(只要配置与给定的 howtogeek 教程相同)。