文档首页> 技术教程> 给 SSH 加一道双因素认证

给 SSH 加一道双因素认证

发布时间:2025-10-10 13:47        更新时间:2025-10-11 10:00
密钥之外,SSH 还能再叠一层动态验证码,也就是常说的双因素认证(2FA):登录时除了密钥,还要输入一个每 30 秒变化的一次性码。偷走密钥没有码进不来,捡到码没有密钥同样进不来。 第一步:安装并初始化 CentOS 上 `yum install -y google-authenticator`(来自 EPEL 源),Ubuntu 上 `apt install -y libpam-google-authenticator`。以对应用户身份运行 `google-authenticator`,它会给出二维码、密钥和一串应急码。用手机上的验证器应用扫码保存,应急码抄在纸上收好——这是手机丢失时唯一的登录凭证。配置按用户独立存放在 ~/.google_authenticator,可以只给需要的账号开启,root 单独处理。这套机制叫 TOTP:服务器与手机共享一把密钥,各自按当前时间片计算验证码,时间对上码就对上,原理简单,可靠性经过多年验证。 第二步:接通 PAM 与 sshd 编辑 /etc/pam.d/sshd,加一行: ``` auth required pam_google_authenticator.so ``` 再改 /etc/ssh/sshd_config:`ChallengeResponseAuthentication yes`(新版 OpenSSH 写作 KbdInteractiveAuthentication),同时确认 PasswordAuthentication 的取值与你的整体方案一致。 第三步:确认时间同步并验证 验证码基于时间计算,服务器时间不准会导致码怎么输都错。`chronyc sources` 确认时间源正常,云主机默认同步一般没问题,自建机房要留意。然后 `systemctl restart sshd`,另开窗口连接:密钥验证通过后会提示输入 verification code,对照手机上的 6 位码输入即登录成功。建议先用一个测试账号走完整流程,确认无误再推广到常用账号,全程不要断开原来的会话——这是所有认证改动的铁律。 应急与回退 手机丢失时,用初始化时保存的应急码顶替验证码登录,或从云控制台的 VNC 进入,把 PAM 那一行注释掉回退。建议每半年做一次丢手机演练,真的用应急码走一遍登录流程,等纸条失效那天才发现就晚了。更务实的做法是把验证码校验只放在公网入口的跳板机上,内网机器维持单因素,安全与日常效率两头都顾住。改动认证这种事,验证一次的成本远低于把自己锁在门外一次。