背景
在现代 Linux 系统中,SSH 公钥认证已成为远程登录与自动化运维的基础设施之一。随着密码学实践的演进,Ed25519 已成为 OpenSSH 官方推荐的默认算法。本文记录在 Linux 环境下生成 Ed25519 SSH key 的最小且安全做法,并澄清若干常见误解,重点面向:
- 每台系统各自维护一把 SSH key
- 不依赖 GUI,不引入额外工具
- 关注长期可维护性与可重复性
全文仅涉及事实与机制,不包含个人偏好或架构建议。
一、推荐的算法选择
当前时间节点(2025–2026 年前后),在 OpenSSH 环境中:
- Ed25519 是默认推荐算法
- 相比 RSA,key 更短、计算更快、实现更简洁
- 安全性在可预期的未来仍然充足
因此,以下示例均以 Ed25519 为前提。
二、生成 Ed25519 SSH Key 的标准命令
在 Linux 命令行下,生成一把偏安全取向的 Ed25519 key:
ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519_$(hostname) -C "$(hostname)"
参数说明
-t ed25519
指定使用 Ed25519 算法。-a 100
设置 KDF(Key Derivation Function)迭代次数,用于保护私钥 passphrase,提升抗离线暴力破解能力。-f ~/.ssh/id_ed25519_$(hostname)
指定输出文件名。此处使用主机名,仅用于文件区分,不参与认证逻辑。-C "$(hostname)"
设置公钥注释(comment),用于人工识别 key 来源。
执行后将生成:
~/.ssh/id_ed25519_<hostname> # 私钥
~/.ssh/id_ed25519_<hostname>.pub # 公钥
三、关于 passphrase
生成过程中会提示输入 passphrase:
- passphrase 是私钥的第二道保护
- 不影响 SSH 协议本身
- 可与 ssh-agent 配合,避免频繁输入
是否设置 passphrase 不影响 key 的数学有效性,但会影响私钥泄露后的风险等级。
四、公钥最后的“名字”是什么?
典型的 Ed25519 公钥内容如下:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI… example-name
其结构为:
[算法] [base64 编码的公钥主体] [comment]
其中:
- 前两部分:参与 SSH 认证校验
- 最后一部分(comment):
- 纯文本注释
- 仅供人类阅读
- SSH 认证时完全忽略
五、修改主机名或注释是否影响 key 可用性?
结论非常明确:
不会。
SSH key 的可用性只取决于:
- 私钥
- 与之匹配的公钥主体
与以下内容完全无关:
- 主机名是否变更
- key 文件名
- 公钥 comment 内容
即使:
- 系统 hostname 已修改
- 公钥 comment 仍为旧名称
只要私钥与公钥主体匹配,SSH 认证仍然正常工作。
六、修改公钥 comment 的方式
方法一:使用 ssh-keygen(推荐)
ssh-keygen -c -f ~/.ssh/id_ed25519_xxx -C "new-name"
该操作:
- 不生成新 key
- 不改变私钥
- 仅更新
.pub文件中的 comment
方法二:直接编辑 .pub 文件
vim ~/.ssh/id_ed25519_xxx.pub
只修改最后一段文本即可,不影响任何认证行为。
七、一个容易混淆的点:ksshaskpass
在 KDE 等桌面环境中,生成或使用 SSH key 时可能弹出图形化密码输入框,这通常由 ksshaskpass 提供。
需要明确的是:
- 生成 key 的命令始终是
ssh-keygen ksshaskpass只负责 passphrase 的 GUI 输入- 不存在名为
ksshkeygen的工具
总结
- Ed25519 是当前 Linux / OpenSSH 环境下的默认优选算法
ssh-keygen是唯一需要使用的生成工具- 公钥中的 comment 可随意修改,不影响认证
- 主机名变更不会导致 SSH key 失效
SSH key 本质上是数学对象,而非“绑定名称的凭证”。理解这一点,有助于长期维护大量系统与 key 时保持确定性与可控性。