Linux 开启 OTP 认证¶
1. 安装 google-authenticator¶
CentOS 运行:
2. 配置令牌¶
直接使用 google-authenticator 配置(此处配置的是当前用户令牌):
3. 配置 PAM¶
编辑 /etc/pam.d/sshd :
4. 配置 sshd 使用二次验证¶
修改 /etc/ssh/sshd_config 配置,加入:
找到 /etc/ssh/sshd_config.d/50-redhat.conf 并注释以下行:
检查配置无误后重启 sshd 服务:
此时 SSH 登录会变成需要公钥、密码和二次认证码,如果要求只要公钥和二次认证码,找到 /etc/pam.d/sshd 并注释:
5. 为 ProxyJump 跳板用户免除 OTP¶
如果需要新建一个专用于 SSH ProxyJump 的用户(如 proxy),该用户仅做端口转发跳板、不分配 shell、不需要 OTP,其他用户仍走公钥 + OTP 双因素认证,按以下步骤配置。
5.1 1. 创建 proxy 用户¶
Note
-s /sbin/nologin 使该用户无法获得 shell,但 SSH ProxyJump(端口转发)不需要 shell 也能正常工作。
5.2 2. 修改 PAM 配置:proxy 用户跳过 OTP¶
编辑 /etc/pam.d/sshd,将原来的:
改为:
pam_succeed_if.so user = proxy— 如果当前用户是proxy,success=done直接跳过后续 auth 模块(OTP 被跳过)- 其他用户匹配
default=ignore,继续走下一行pam_google_authenticator.so
5.3 3. 修改 sshd_config:proxy 用户仅需公钥¶
在 /etc/ssh/sshd_config 中,AuthenticationMethods 下方增加 Match 块:
5.4 4. 为 proxy 用户配置公钥¶
Note
proxy 用户不需要运行 google-authenticator,PAM 层已经跳过了 OTP 验证。
5.5 5. 验证并重启¶
5.6 使用示例¶
在其他机器的 ~/.ssh/config 中通过跳板机连接目标服务器:
5.7 安全要点¶
| 措施 | 作用 |
|---|---|
-s /sbin/nologin |
proxy 用户无法获得 shell |
PermitTTY no |
禁止分配终端 |
Match User proxy + AuthenticationMethods publickey |
仅需公钥,无 OTP |
| 不为 proxy 生成 OTP secret | 纵深防御,即使 PAM 配置出错也无法通过 OTP 认证 |
Warning
DisablePTTY 不是 OpenSSH 合法指令,不要使用,PermitTTY no 已足够。