公钥 – 或 – 用于SSHlogin的密码和Google身份validation器

我find了一篇文章( http://www.howtogeek.com/121650/how-to-secure-ssh-with-google-authenticators-two-factor-authentication/ ),解释了如何configurationOpenSSH以寻求Google Authenticator代码成功login。

是否可以configurationOpenSSH,以便发生以下情况:

  • 如果用户有正确的私钥login到服务器,请将用户login。
  • 如果用户没有允许login到服务器的私钥,请向用户提供该帐户的密码AND以获取Google身份validation器代码。

这将是方便的(因为在我的电脑上,我只需要私钥)和安全(因为我可以离开密码authentication启用和安全)。

有什么办法可以完成我想要的吗?

提前致谢。 🙂

可以configuration一个sshd来要求一个有效的密钥对, 或者对每个请求使用HOTP(新的一次性密码(OTP))基于OATH的authentication – 我正在做。 我很确定Google Authenticator只是另一个OATH实现。

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

假设您的sshd已经设置为允许基于公钥的身份validation(大部分都是),请将这两行添加到sshd_config

 PasswordAuthentication no ChallengeResponseAuthentication yes 

安装pam_auth (这是针对x86_64的面向CentOS的方式):

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

使authentication文件/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秒新的OTP),但是我使用的是硬件OATH令牌而不是软件,而且它们是yubikeys,它只做HOTP OATH。

唯一的缺点是,当你没有提供一个有效的密码的时候,你需要input密码之前的OATH密码。 我不能让它反过来,但决定我不在乎那么多; 这个提示很清楚哪个令牌被请求。

你需要追加:

 AuthenticationMethods publickey keyboard-interactive 

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