答案1
尽管此方法不检查 1 种身份验证方法,但它确实解决了使用 OTP 从不安全/不受信任的计算机登录的问题。
要将 SSH 守护进程配置为侦听多个端口(一个用于公钥身份验证,另一个用于 OTP 身份验证),只需将另一个端口号添加到 sshd_config 文件中,即
Port 22 # For key-based auth
Port 60000 # For OTP-based auth
2-FA 基于 Google 的两步身份验证技术。要安装库和程序:
$ sudo apt-get install libpam-google-authenticator
同时,在您的智能手机上安装 Google Authenticator 应用程序。安装后,从终端启动程序:
$ google-authenticator
这将为您提供一个条形码、一个秘密和一堆刮刮码。确保他们的安全!如果您无法使用手机或需要紧急访问,这些代码将是您进入的唯一途径。不要低估这种备份机制的重要性。从长远来看,这可能会让你陷入困境。配置 PAM 模块以使用 Google Authenticator:
$ sudo nano /etc/pam.d/sshd
要禁用密码登录,请在 @include common-auth 行前面添加 #。另外,在文件底部添加:
auth required pam_google_authenticator.so
要启用 OTP 身份验证:
$ sudo nano /etc/ssh/sshd_config
找到包含短语的行:ChallengeResponseAuthentication
并将其从“no”更改为“yes”。
设置PermitRootLogin no
和PasswordAuthentication no
。
在文件末尾,使用“match”参数来确定必须使用哪种身份验证机制才能从该端口访问计算机,例如:
Match LocalPort 22
PasswordAuthentication no
AuthenticationMethods publickey
PubKeyAuthentication yes
Match LocalPort 60000
AuthenticationMethods keyboard-interactive:pam
参数“keyboard-interactive:pam”强制 SSH 守护进程转到 PAM 模块守护进程(在 下配置/etc/pam.d/sshd
)并按照那里指定的方式进行身份验证(因此还需要通过散列该common-auth
行来禁用从 PAM 模块的密码登录) 。不要忘记重新启动 SSH 守护进程以使更改生效:
$ sudo /etc/init.d/sshd restart
然后,当在不受信任的计算机上时,只需通过 SSH 进入端口 60000(或您设置的任何端口)并使用 OTP 进行身份验证。
答案2
编辑:很抱歉回答我自己的问题! (另外两个答案很好,但没有完全回答问题。但仍然非常有帮助!)
这OTPassword 可插拔身份验证模块在 Linux 的 PAM 中实现 Steve Gibson 的完美纸质密码系统。安装后,您将获得 PPP 身份验证。但是 ssh 密钥绕过又如何呢?他们网站上的常见问题解答回答了这个问题:
如果您有一台经常登录远程系统的受信任计算机,请使用 ssh 密钥。使用 生成它们
ssh-keygen
,并将新的 ~/.ssh/id_rsa.pub 复制到远程计算机上的 ~/.ssh/authorized_keys 中。当 SSH 使用密钥对用户进行身份验证时,它会忽略 PAM。
自动方便!
编辑:谷歌身份验证器和双重安全似乎也是不错的解决方案。他们不提供一次性纸质密码;相反,他们使用您的智能手机生成不断变化的TOTP键。 (Duo Security 还可以通过向哑机发送一条带有几个一次性密码的短信来与哑机配合使用。但是 Duo Security 不是本地的;您必须依赖他们的服务器...)
答案3
使用 OTP 作为后备的公钥身份验证(这就是您的意思,对吧?):
- 使用密码回退的公钥身份验证是 OpenSSH 的默认行为
- 验证密码的方式最好在 PAM 配置文件中定义
答案4
这可能很简单,但也有一些需要避免的陷阱:
大多数配置更改需要在 sshd_config 文件中进行,通常位于 /etc/ssh/sshd_config
您已经运行了共享密钥,因此我将在这里跳过它:
您要注意的行是:
PasswordAuthentication yes
您需要注意的注意事项是限制谁可以登录以及如何登录。这些都应该到位,以限制对尽可能小的用户组的访问:
PermitEmptyPasswords no
AllowUsers [email protected].*
AllowGroups sshusers
您可以在此处设置许多选项,查看手册页了解全套可用选项。
我建议只为 ssh 权限设置一个组。
下面的标志也是强烈地推荐:
PermitRootLogin no
如果密钥未发送/重新确认,这将使守护进程请求密码。如果您愿意,您可以添加 OTPW 的障碍,但理论上您处于加密环境中,因此严格来说没有必要。查看了 OTPW 信息后,您链接的代码似乎有最后更新于 2003 年如果没有经过同行评审,我不愿意使用它。从那时起,安全编码实践乃至整个环境都发生了很大变化。