使用公钥或密码以及 Google Authenticator 进行 SSH 登录

使用公钥或密码以及 Google Authenticator 进行 SSH 登录

我找到了一篇文章(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

publickeykeyboard-interactive之间没有逗号/etc/ssh/sshd_config。所有其他设置都不必更改(只要配置与给定的 howtogeek 教程相同)。

相关内容