跳到主要内容

双因素认证

双因素认证(2FA)为 SSH 登录增加额外的安全层,通常结合密码和动态验证码。XTerminal 通过 keyboard-interactive 认证方式支持 2FA。

什么是双因素认证

双因素认证要求用户提供两种不同类型的身份证明:

  1. 你知道的:密码
  2. 你拥有的:手机上的动态验证码(TOTP)、硬件令牌等

即使密码泄露,攻击者也无法仅凭密码登录服务器。

服务器端配置要求

要使用 2FA,服务器需要先进行配置。以 Google Authenticator 为例:

安装 Google Authenticator

# Ubuntu/Debian
sudo apt install libpam-google-authenticator

# CentOS/RHEL
sudo yum install google-authenticator

配置用户

# 以需要启用 2FA 的用户身份运行
google-authenticator

按提示操作:

  1. 选择基于时间的令牌(TOTP)
  2. 扫描二维码或手动输入密钥到 Google Authenticator 或其他 TOTP 应用
  3. 保存紧急恢复码

配置 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 配置

使用交互认证

  1. 创建或编辑 SSH 连接
  2. 验证方式 设置为 交互认证
  3. 填写登录用户名

交互认证配置

字段说明必填
登录用户SSH 登录用户名

连接流程

使用交互认证连接时,XTerminal 会弹出对话框提示输入:

  1. 首先提示输入 密码
  2. 然后提示输入 验证码(Verification code)

根据服务器配置,提示顺序和内容可能不同。

keyboard-interactive 认证

keyboard-interactive 是 SSH 协议定义的一种灵活认证方式,允许服务器发送任意提示,客户端响应用户输入。

特点

  • 支持多轮交互:服务器可以发送多个提示
  • 自适应流程:根据服务器配置动态响应
  • 广泛兼容:支持各种 PAM 模块

支持的场景

场景说明
TOTP 验证码Google Authenticator、Microsoft Authenticator 等
短信验证码服务器发送短信后提示输入
硬件令牌YubiKey 等硬件设备
自定义 PAM企业自定义的认证流程

每次询问

如果不想保存用户名,可以使用 每次询问 认证方式:

  • 每次连接时弹出对话框
  • 输入用户名和密码
  • 适合临时连接或共享设备

跳板机与 2FA

当跳板机启用了 2FA 时,需要注意:

  1. XTerminal 会自动延长连接超时时间(至少 120 秒),以便用户有足够时间输入验证码
  2. 跳板机的认证对话框会优先弹出
  3. 完成跳板机认证后,才会连接目标服务器

详细配置参见 多跳代理

常见问题

验证码输入正确但失败

  1. 时间不同步:TOTP 依赖时间,确保服务器和手机时间准确
    # 服务器同步时间
    sudo ntpdate pool.ntp.org
  2. 时区问题:检查服务器时区设置
  3. 验证码过期:TOTP 验证码通常 30 秒有效,尽快输入

没有弹出验证码输入框

  1. 确认服务器已正确配置 PAM 和 SSH
  2. 确认使用 交互认证每次询问 方式
  3. 检查服务器 SSH 配置:
    grep -i "KbdInteractive\|ChallengeResponse" /etc/ssh/sshd_config

连接超时

2FA 需要用户手动输入验证码,默认超时时间可能不够:

  1. 在连接设置中增加 超时时间
  2. 使用交互认证时,XTerminal 会自动延长超时

下一步