Answers:
一种实现方法是使用Google提供的名为Google Authenticator的工具。
sudo apt-get install libpam-google-authenticator
编辑/etc/pam.d/sshd
以包含模块:
sudoedit /etc/pam.d/sshd
然后在文件顶部添加此行并保存:
auth required pam_google_authenticator.so
编辑您的SSH配置文件以打开挑战:
sudoedit /etc/ssh/sshd_config
然后从以下更改响应身份验证:
ChallengeResponseAuthentication no
至
ChallengeResponseAuthentication yes
然后保存文件。
sudo restart ssh
重新启动SSH
跑 google-authenticator
您需要其中之一才能在另一台设备上接收身份验证代码。
请注意,将密码与一次性密码结合使用是双重身份验证:将“您知道的信息”(密码)与“您拥有的信息”(密码生成器设备)结合在一起。另一方面,如果将一次性使用的密码与SSH密钥对结合使用,则全部都与“所拥有的”有关。当两个认证因子属于同一类型时,您将没有两因子认证。这有时被称为“一个半认证”。
Google Authenticator适用于您的个人服务器,但是您可能会发现它与现有的身份基础结构并不合适。如果要探索其他选项,请考虑使用RADIUS作为身份验证协议和pam-radius插件。所有面向企业的两因素身份验证系统都支持radius。我们已经编写了一篇文档,介绍如何通过pam-radius将WiKID两因素身份验证添加到Ubuntu。
使用radius使您可以将除SSH之外的其他系统绑定到同一身份验证服务器。您也可以通过freeradius将身份验证请求路由到LDAP,然后再路由到2FA服务器,以将授权与身份验证分开。您可以使用AD btw进行相同的操作。
我敦促每个人都将以下行放在上面的顶部而不是底部(/etc/pam.d/sshd
如上所述)(现已更正):
auth required pam_google_authenticator.so
否则,您的系统将继续受到密码的蛮力攻击,从而危及两因素身份验证的第一部分:密码。
首先将要求您输入验证码,然后要求您输入密码(无论验证码是否正确)。如果任何一个错误,则需要再次输入两者。您可以用其他方法配置它,但是要在当前的默认ubuntu(15.04)sshd配置中进行描述要更改的难度要大一些。
有关为什么需要它的详细信息,请检查以下问题: