我目前有一台运行 OpenSSH 以及 Samba 和其他一些服务的 Ubuntu Server 12.04。目前我已经设置了公钥身份验证,我想知道是否可以设置双因素身份验证?我一直在研究 Google Authenticator,我目前将它用于我的 Gmail 帐户。
我发现了一个看起来兼容的 PAM 模块,但是似乎你被迫使用密码和生成的代码。
我想知道是否有办法使用 Google Authenticator 应用程序(或类似程序)以及我的公钥来验证我的 SSH 服务器?
答案1
Red Hat 在 RHEL(以及 CentOS)6.3 中向 OpenSSH 添加了补丁,以要求多种身份验证机制,因此您可以执行以下操作:
RequiredAuthentications2 publickey,keyboard-interactive
查看发行说明不再赘述。
不幸的是,这个功能似乎不在 OpenSSH 上游或 Ubuntu 12.04 中,所以除非您想找到补丁并重新编译 OpenSSH,否则恐怕您就没那么幸运了。
答案2
您正在寻找Duo 安全
答案3
您可以同时使用 Google Authenticator PAM 模块和公钥,但每次只能使用其中一个进行身份验证。也就是说,如果用户使用授权公钥登录,则不需要令牌。
或者换句话说:令牌仅适用于密码验证,而不是 SSH 密钥。
顺便说一下,这个限制不是来自 Google Authenticator 模块,而是来自 SSH,它仅为ChallengeResponseAuthentication
PAM 实现双因素身份验证(通过),但在提供有效公钥时不会调用 PAM。
答案4
我知道这个问题有点过时了,但为了将来寻找解决方案的人(包括我自己),还有人讨论使用 sshd_config 文件中的 ForceCommand 选项来运行脚本,然后执行身份验证。这里有一个示例脚本这里您可以根据需要进行一些修改,尽管在该示例中,他从 authorized_keys 文件中调用它,而不是使用 sshd_config 的 ForceCommand 使其成为系统范围的。