sshd_config 中不存在 hostkeyagent 参数,openssh 官方从未定义或支持该字段;host key 必须由 sshd 直接读取磁盘私钥文件,不可由硬件令牌托管,而 yubikey 等设备仅适用于客户端用户认证(如 ecdsa-sk),不能替代主机密钥。

Linux 的 sshd_config 没有 HostKeyAgent 这个参数,OpenSSH 官方配置项中从未定义或支持该字段。这是一个常见误解,可能源于混淆了以下几类概念:
-
HostKey:指 SSH 服务端用于身份声明的密钥(如/etc/ssh/ssh_host_rsa_key),由sshd进程直接加载,必须是磁盘上可读的私钥文件,不支持硬件令牌托管; -
AuthenticationMethods/PubkeyAuthentication:控制用户登录认证方式,可配合硬件令牌(如ecdsa-sk或gpg-agent代理); -
HostKeyAgent并非 OpenSSH 配置项,也未在 openssh.com 文档、man sshd_config或源码中出现。
? 正确理解:硬件令牌保护的是 谁来登录,不是 服务器是谁
SSH 协议中:
- Host Key(主机密钥)用于向客户端证明“我是目标服务器”,防止中间人攻击;
- Client Authentication(客户端认证)才是用 YubiKey 等硬件令牌验证“你是谁”。
硬件安全令牌(YubiKey)无法替代或托管 Host Key,原因很明确:
- Host Key 必须在
sshd启动时由 root 用户直接读取并完成密钥协商; - 所有主流硬件令牌(FIDO2/PIV/OpenPGP)均不提供“被
sshd直接调用以签名 TLS/SSH 握手消息”的接口; - OpenSSH 不支持通过 PKCS#11、CTAP 或 GPG agent 加载 Host Key —— 这是协议栈底层限制,非配置缺失。
✅ 实际可行的安全增强路径(聚焦 Host Key 保护)
虽然不能把 Host Key “放进” YubiKey,但可通过以下方式显著提升其安全性:
1. 限制 Host Key 访问权限
sudo chmod 600 /etc/ssh/ssh_host_*_key sudo chown root:root /etc/ssh/ssh_host_*_key
确保仅 root 可读,防止提权后窃取。
2. 使用强算法 + 足够长度
在 sshd_config 中显式指定高安全性 Host Key(禁用弱算法):
HostKey /etc/ssh/ssh_host_ed25519_key HostKey /etc/ssh/ssh_host_rsa_key # 禁用 DSA 和旧版 RSA(<blockquote><p>✅ 提示:OpenSSH 8.8+ 已默认禁用 <code>ssh-rsa</code>(SHA-1),建议使用 <code>ed25519</code> 或 <code>rsa-sha2-512</code>。</p></blockquote><h4>3. 离线生成 + 安全存储备份</h4>
- 在无网络、无持久存储的 Live 系统中生成 Host Key;
- 备份私钥到加密 USB 设备(如 LUKS 分区),不联网、不上传、不存云;
- 记录指纹(
ssh-keygen -l -f /etc/ssh/ssh_host_ed25519_key),供客户端首次连接校验。
4. 配合硬件令牌强化 用户登录(真正落地点)
这才是 YubiKey 发挥作用的核心场景:
- 用户侧用
ecdsa-sk(FIDO2)或 GPG+PIV 模式实现物理按键+PIN 登录; - 服务端
sshd_config强制:PubkeyAuthentication yes AuthenticationMethods publickey PasswordAuthentication no PermitEmptyPasswords no
这样,即使 Host Key 泄露(极难,但理论可能),攻击者仍无法登录——因为没用户私钥,且私钥锁死在硬件中。
❌ 常见误区澄清
| 说法 | 是否成立 | 说明 |
|---|---|---|
| “用 YubiKey 存 Host Key,让 sshd 从它读取” | ❌ |
sshd 不支持任何硬件 token 接口加载 HostKey
|
“设置 HostKeyAgent /path/to/yk-agent 就能代理” |
❌ | 该参数不存在,配置会报错或被忽略 |
| “PIV 模式可签 SSH handshake” | ❌ | PIV 支持的是 X.509 签名,非 SSH 协议握手签名 |
| “FIDO2 可用于服务端身份证明” | ❌ | FIDO2/WebAuthn 是 客户端认证标准,无服务端角色定义 |
总结
想用 YubiKey 保护 Linux SSH 宿主机,重点不在 Host Key,而在 堵死所有弱认证入口,并把用户登录绑定到不可复制的物理设备。Host Key 应通过最小权限、强算法、离线生成与离线备份来保障;真正的“硬件级防线”,体现在每个管理员都必须插上 YubiKey、输入 PIN、按一下触点才能登录。
这比幻想“让服务器密钥住进硬件”更务实,也更安全。











