用于 SSH 登录的公钥 - 或 - 密码和 Google 身份验证器

Edu*_*Alm 4 linux ssh pam google-authenticator

我找到了一篇文章 ( http://www.howtogeek.com/121650/how-to-secure-ssh-with-google-authenticators-two-factor-authentication/ ) 解释了如何配置 OpenSSH 以请求 Google 身份验证器成功登录后的代码。

是否可以配置 OpenSSH,以便发生以下情况:

  • 如果用户有正确的私钥登录服务器,则登录该用户。
  • 如果用户没有允许登录服务器的私钥,请向用户询问帐户密码和 Google 身份验证器代码。

这会很方便(因为在我的计算机上我只需要私钥)并且安全(因为我可以启用密码验证并且安全)。

有什么办法可以实现我想要的吗?

提前致谢。:)

Mad*_*ter 5

这绝对是可以配置的sshd,要求无论是一个有效的密钥对使用HOTP(对每个请求新的一次性密码(OTP))基于OATH认证-我这样做。我相当确定 Google Authenticator 只是另一个 OATH 实现。

我的完整文章可以在http://www.teaparty.net/technotes/yubikey-oath.html阅读,但结果是:

假设您sshd已经设置为允许基于公钥的身份验证(大多数是),请将这两行添加到sshd_config

PasswordAuthentication no
ChallengeResponseAuthentication yes 
Run Code Online (Sandbox Code Playgroud)

安装pam_auth(这是面向 CentOS 的方式,适用于 x86_64):

yum install pam_oath
ln -s /usr/lib64/security/pam_oath.so /lib64/security/
Run Code Online (Sandbox Code Playgroud)

制作身份验证文件/etc/users.oath、模式600、所有者root:root,并使用以下行填充它:

#type   username        pin     start seed
HOTP    fred            -       123a567890123b567890123c567890123d567890
Run Code Online (Sandbox Code Playgroud)

编辑/etc/pam.d/sshd并添加行

auth required pam_oath.so usersfile=/etc/users.oath window=5 digits=8 
Run Code Online (Sandbox Code Playgroud)

digits=8如果您对 6 位 HOTP OATH 感到满意,请跳过。我相信类似的方法可用于 TOTP OATH(每n秒更新一次 OTP ),但我使用的是硬件 OATH 令牌而不是软件令牌,它们是 yubikeys,仅用于 HOTP OATH。

唯一的问题是,当您在没有提供有效密钥的情况下进行 ssh 连接时,它会在密码之前要求输入 OATH 代码。我不能让它以相反的方式工作,但我决定我并不那么在意;提示很清楚正在请求哪个令牌。