只有当服务器运行 OpenSSH 10.6 或更新版本时,CH-J Tools 才能向该服务器添加后量子密钥类型 ssh-mldsa44-ed25519。OpenSSH 10.6(2026年10月6日)是首个支持此密钥类型标准化形式的版本。旧版本会拒绝这种形式。其中某些版本,例如 Ubuntu 26.04 中的 10.2p1,仅支持实验性的 …@openssh.com 变体,而 CH-J Tools 不使用该变体。
本文撰写时,Ubuntu 和 Debian 尚未通过 apt 提供 10.6。本指南将安装官方 OpenSSH 10.6p2(2026年11月5日发布,修复了未启用 PAM 的 Linux 构建中的密码认证绕过漏洞),使其与发行版的软件包并存,并将 ssh 服务指向此版本。
已在全新安装的 Ubuntu 26.04.1 LTS 上测试:安装、使用 ssh-mldsa44-ed25519 密钥登录、重启及回滚。
开始之前
- 此构建版本需要由您自行维护。
apt upgrade不会为其提供安全修复。请关注 OpenSSH 发行说明,并使用更新版本重复此流程,或执行回滚。 - 在整个操作过程中保持第二个 SSH 会话处于打开状态。最好同时具备控制台访问权限(虚拟机监控程序、IPMI、云控制台)。
- 请先在测试机器上试用。
- 您需要 root 权限、systemd、
/var/tmp中约 1 GiB 的可用空间,以及供apt和下载 OpenSSH 使用的互联网连接。
脚本的工作流程
- 使用
apt安装构建依赖项。 - 下载
openssh-10.6p2.tar.gz,核对预先固定的 SHA-256 值,并验证由 OpenSSH 发布密钥7168 B983 815A 5EEF 59A4 ADFD 2A3F 414E 7360 60BA生成的 OpenPGP 签名。 - 构建并安装到
/opt/openssh-10.6p2。您在/etc/ssh中的配置(主机密钥、sshd_config)及 PAM 配置保持不变。 - 使用新版本检查当前的
sshd_config,然后在127.0.0.1:2226上启动测试实例。只有两项检查均通过后,才会执行切换。 - 添加 systemd 补充配置文件
/etc/systemd/system/ssh.service.d/chj-openssh.conf,并禁用ssh.socket,因为上游 sshd 不支持套接字激活。随后重启ssh.service。 - 检查正在运行的进程是否为
/opt/openssh-10.6p2/sbin/sshd,且标识横幅是否为SSH-2.0-OpenSSH_10.6。如果任一检查失败,脚本会自动回滚。
安装
curl -fsSLO https://tools.ch-j.de/files/tools/chj-openssh-10.6.sh
echo "cdf3031a0b64db3e3bf3c83d31bd746aee5505757b1af5e137750326ed8d7a01 chj-openssh-10.6.sh" | sha256sum -c -
less chj-openssh-10.6.sh # read it before running it as root
sudo bash chj-openssh-10.6.sh install
然后打开一个新的 SSH 连接。确认新连接可以成功登录后,才能关闭旧会话。
检查与回滚
sudo bash chj-openssh-10.6.sh status # running binary, ssh.socket, banner
sudo bash chj-openssh-10.6.sh rollback # back to the distribution sshd
回滚会删除补充配置文件,在 ssh.socket 原先已启用的情况下重新启用它,并重启发行版的 sshd。/opt/openssh-10.6p2 中的构建版本会保留在磁盘上,直到您将其删除。回滚后,ssh-mldsa44-ed25519 密钥将无法再用于该服务器。
随后在 CH-J Tools 中操作
重新连接服务器。现在,您可以在 Users 中从 Keychain 添加 ssh-mldsa44-ed25519 密钥。如果服务器仍报告旧版本,CH-J Tools 会显示消息 "OpenSSH 10.6 or newer is required",并且不会添加密钥。