双因素认证
双因素认证(2FA)为 SSH 登录增加额外的安全层,通常结合密码和动态验证码。XTerminal 通过 keyboard-interactive 认证方式支持 2FA。
什么是双因素认证
双因素认证要求用户提供两种不同类型的身份证明:
- 你知道的:密码
- 你拥有的:手机上的动态验证码(TOTP)、硬件令牌等
即使密码泄露,攻击者也无法仅凭密码登录服务器。
服务器端配置要求
要使用 2FA,服务器需要先进行配置。以 Google Authenticator 为例:
安装 Google Authenticator
# Ubuntu/Debian
sudo apt install libpam-google-authenticator
# CentOS/RHEL
sudo yum install google-authenticator
配置用户
# 以需要启用 2FA 的用户身份运行
google-authenticator
按提示操作:
- 选择基于时间的令牌(TOTP)
- 扫描二维码或手动输入密钥到 Google Authenticator 或其他 TOTP 应用
- 保存紧急恢复码
配置 PAM
编辑 /etc/pam.d/sshd,添加:
auth required pam_google_authenticator.so
配置 SSH
编辑 /etc/ssh/sshd_config:
ChallengeResponseAuthentication yes
# 或较新版本使用
KbdInteractiveAuthentication yes
重启 SSH 服务:
sudo systemctl restart sshd
XTerminal 中的 2FA 配置
使用交互认证
- 创建或编辑 SSH 连接
- 将 验证方式 设置为 交互认证
- 填写登录用户名

| 字段 | 说明 | 必填 |
|---|---|---|
| 登录用户 | SSH 登录用户名 | 是 |
连接流程
使用交互认证连接时,XTerminal 会弹出对话框提示输入:
- 首先提示输入 密码
- 然后提示输入 验证码(Verification code)
根据服务器配置,提示顺序和内容可能不同。
keyboard-interactive 认证
keyboard-interactive 是 SSH 协议定义的一种灵活认证方式,允许服务器发送任意提示,客户端响应用户输入。
特点
- 支持多轮交互:服务器可以发送多个提示
- 自适应流程:根据服务器配置动态响应
- 广泛兼容:支持各种 PAM 模块
支持的场景
| 场景 | 说明 |
|---|---|
| TOTP 验证码 | Google Authenticator、Microsoft Authenticator 等 |
| 短信验证码 | 服务器发送短信后提示输入 |
| 硬件令牌 | YubiKey 等硬件设备 |
| 自定义 PAM | 企业自定义的认证流程 |
每次询问
如果不想保存用户名,可以使用 每次询问 认证方式:
- 每次连接时弹出对话框
- 输入用户名和密码
- 适合临时连接或共享设备
跳板机与 2FA
当跳板机启用了 2FA 时,需要注意:
- XTerminal 会自动延长连接超时时间(至少 120 秒),以便用户有足够时间输入验证码
- 跳板机的认证对话框会优先弹出
- 完成跳板机认证后,才会连接目标服务器
详细配置参见 多跳代理。
常见问题
验证码输入正确但失败
- 时间不同步:TOTP 依赖时间,确保服务器和手机时间准确
# 服务器同步时间
sudo ntpdate pool.ntp.org - 时区问题:检查服务器时区设置
- 验证码过期:TOTP 验证码通常 30 秒有效,尽快输入
没有弹出验证码输入框
- 确认服务器已正确配置 PAM 和 SSH
- 确认使用 交互认证 或 每次询问 方式
- 检查服务器 SSH 配置:
grep -i "KbdInteractive\|ChallengeResponse" /etc/ssh/sshd_config
连接超时
2FA 需要用户手动输入验证码,默认超时时间可能不够:
- 在连接设置中增加 超时时间
- 使用交互认证时,XTerminal 会自动延长超时