问题描述
我想通过添加另一个因素来强化SSH登录的身份验证:密码生成器设备或手机上的密码生成应用程序。默认设置中唯一明显的选项是固定密码和密钥对。我怎样才能做到这一点?
(如果我使用密码加密码生成器,则提供two-factor authentication(2FA):密码为“what I know”,密码为“what I have”。)
最佳解决方案
一种方法是使用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
-
这将为您提供密钥,验证码和紧急刮刮代码。它还会问你一些限速问题。
-
移动应用:
您需要其中一个在另一台设备上接收身份验证代码。
相关和有用:
-
大部分答案来自Jean-Francois Theroux的this blogpost,但已更新。
-
http://guides.webbynode.com/articles/security/ubuntu-google-authenticator.html
-
http://www.mnxsolutions.com/security/two-factor-ssh-with-google-authenticator.html
-
我的理解是,如果您通过SSH密钥使用无密码登录,您只能执行其中一个,请参阅此问题:我如何设置password-less SSH登录?
-
如果你正在使用Puppet,那里有一个Puppet(木偶)模块:https://github.com/camptocamp/puppet-googleauthenticator
-
请参阅Maarten的回答并链接到github问题,了解为什么需要在pam配置的顶部添加.so行:https://askubuntu.com/a/668398
请注意,将密码与single-use密码组合为two-factor认证:它将“what you know”(密码)与“what you have”(密码生成器设备)组合在一起。另一方面,如果您将single-use密码与SSH密钥对组合在一起,那就是“what you have”。当两个身份验证因素属于同一类型时,您没有two-factor身份验证;这有时被称为“one-and-a-half-factor认证”。
次佳解决方案
Google身份验证器适用于您的个人服务器,但您可能会发现它与您现有的身份基础架构不相符。如果您想探索其他选项,请考虑使用RADIUS作为身份验证协议和pam-radius插件。所有enterprise-oriented two-factor认证系统都支持半径。我们写了一篇关于如何添加WiKID two-factor authentication via pam-radius to Ubuntu的文档。
使用radius可以将除SSH之外的其他系统绑定到同一个身份验证服务器。您还可以通过freeradius将身份验证请求路由到LDAP,然后再路由到2FA服务器以将授权与身份验证分开。你可以用AD btw做同样的事情。
参考资料