一次性密码

出自 ArchWiki

一次性密码 (OTPW) 是一个 PAM 模块,允许使用一次性密码登录系统。这在 安全外壳 的上下文中尤其有用,允许用户从公共或共享计算机使用永远不会再次工作的一次性密码登录。

以下是安装 OTPW 和配置 SSH 以允许 OTPW 登录的说明。

安装

安装 otpwAUR 软件包。

SSH 登录配置

PAM 配置

为 otpw 创建 PAM 配置文件

/etc/pam.d/ssh-otpw
auth sufficient pam_otpw.so
session optional pam_otpw.so

接下来,修改 sshd 的 PAM 配置以包含 otpw。如果您禁用静态密码身份验证 (auth),请注释掉第二个粗体行。以下是修改后的 /etc/pam.d/sshd 以供参考

/etc/pam.d/sshd
#%PAM-1.0
#auth     required  pam_securetty.so     #disable remote root

auth      include   ssh-otpw
#auth      include   system-remote-login #NOTE: This must be disabled to completely disable password logins.
account   include   system-remote-login
password  include   system-remote-login
session   include   system-remote-login

sshd 配置

OTPW 对 SSH 会话使用 Keyboard-Interactive 登录,通过添加以下行启用

/etc/ssh/sshd_config
UsePAM yes
KbdInteractiveAuthentication yes

如果您希望同时允许静态密码登录,请确保 /etc/ssh/sshd_config 包含如下行

/etc/ssh/sshd_config
PasswordAuthentication yes

否则,将其设置为 no。请参阅上面关于编辑 /etc/pam.d/sshd 以完全禁用静态密码验证的信息,因为否则如果 OTPW 失败(例如,当用户用完密码时),PAM 将允许静态密码。

如果您允许密码身份验证,那么在一种身份验证方法失败后,ssh 客户端将回退到另一种方法。请注意,默认情况下,ssh 允许您在每种登录方法中尝试三次密码。

OTPW 配置

OTPW 是为每个用户帐户独立配置的。如果给定的帐户未配置 OTPW,则该帐户将像往常一样简单地使用静态密码。要为帐户配置 OTPW,请以该用户身份运行

$ otpw-gen > ~/otpw_passwords

otpw-gen 将要求输入密码前缀,该前缀必须在所有 otpw 密码的开头键入。这是为了确保如果其他人获得您的 OTPW 列表,他们无法在不知道您的前缀的情况下使用它登录您的帐户。

运行上述命令后,用户的 home 目录中应该有一个名为 otpw_passwords 的文件,其中包含用户的所有 OTPW 密码。还会有一个文件 ~/.otpw,其中包含密码哈希值。 otpw_passwords 可以打印出来并在登录时参考。

使用方法

完成上述配置后,ssh 应该为已配置 OTPW 的用户自动使用 OTPW。OTPW 登录提示如下所示

Password 041:

要登录,只需在您的 otpw_passwords 列表中查找密码 41,例如

041 lYr0 g7QR

然后键入您的前缀,后跟密码的两半。空格是为了可读性而提供的,并且可以包含在键入的密码中,也可以不包含。请勿在前缀和一次性密码之间输入空格。

要指定 ssh 客户端要使用哪种登录方法,请添加 -o PreferredAuthentication=keyboard-interactive 以使用 OTPW,或 -o PreferredAuthentication=password 以使用静态密码。这些选项也可以在每个服务器的 ~/.ssh/config 中指定。

为了防止有人偷窥您的 OTPW 并快速使用它在您登录之前登录您的帐户,OTPW 需要并发登录以输入三个密码而不是仅一个密码。这通常不会成为问题,但如果 OTPW 应该给出如下提示

Password 072/251/152:

然后只需输入您的前缀,以及按请求顺序输入的三个密码。当登录启动时,OTPW 会创建一个文件 ~/.otpw.lock 以检测并发登录。如果当此文件存在时启动第二个登录,OTPW 将请求三个密码。

注意: 由于 OpenSSH 调用 PAM 的方式存在 错误,如果用户使用 Ctrl+c 或类似方式取消 SSH 登录,则 ~/.otpw.lock 文件将不会被删除,并且 OTPW 始终会在之后要求输入三重密码。该错误已标记为已修复,但它仍然影响我。作为一种解决方法,可以简单地手动删除锁定文件,OTPW 将恢复正常的单密码请求。