ssh-keygen -p 可修改密钥口令或升级加密格式,-e/-i 转换公钥格式,所有操作本地完成;-m pem 兼容旧系统,-o 启用 bcrypt 加密;需 chmod 600 保障权限,不支持跨算法转换。

直接用 ssh-keygen -p 就能修改已有密钥的口令或加密格式,用 ssh-keygen -e 或 -i 可转换公私钥的封装格式——所有操作都在本地完成,不依赖网络或第三方工具。
修改密钥口令或升级加密强度
老旧私钥(如 RSA、ECDSA)即使没设口令,也能通过 -p 选项追加高强度保护:
- 运行
ssh-keygen -p -f /path/to/id_rsa,按提示输入原口令(无则直接回车)和新口令 - 加
-m PEM强制输出为传统 PEM 格式,兼容 Java、Python 工具链及老旧系统 - 加
-o则转为 OpenSSH 原生格式(BEGIN OPENSSH PRIVATE KEY),启用更安全的 bcrypt 密钥派生 - 成功后私钥头部会变为
BEGIN ENCRYPTED PRIVATE KEY,表示已用 AES-256-CBC + PBKDF2 加密
转换公钥格式(RFC 4716 / SSH2 / PEM)
不同服务或客户端可能要求特定格式的公钥,可用 -e 或 -i 转换:
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
-
ssh-keygen -e -f id_rsa.pub:将 OpenSSH 公钥转为 RFC 4716 格式(常用于 Tectia、某些 Windows 工具) -
ssh-keygen -i -f id_rsa.pub:把 RFC 4716 或 SSH2 公钥转回 OpenSSH 格式 - 注意:
-e和-i只处理公钥;私钥格式转换主要靠-p -m或-p -o
验证与权限检查
改完别忘了确认是否生效,并防止因权限问题导致认证失败:
- 用
ssh-keygen -l -f id_rsa查看指纹,若提示输入口令说明加密已启用 - 测试连接:
ssh -i id_rsa -o IdentitiesOnly=yes user@host -O exit,能通即正常 - 必须执行
chmod 600 id_rsa,否则 OpenSSH 拒绝加载(权限太宽松视为风险) - 确保
.ssh目录权限为700,authorized_keys为600
特别注意不支持的操作
有些需求看似合理,但 ssh-keygen 并不提供:
- 不能把 RSA 私钥直接转成 Ed25519 —— 密钥类型由算法决定,无法跨算法转换
- 不能去除已有口令后再用
-p重加(需先留空口令,再重新-p设置) - 不要对
/etc/ssh/ssh_host_*.key主机密钥运行-p,会导致sshd启动失败 - OpenSSH 6.5 以下版本不识别
-o生成的格式,生产环境升级前请先验证兼容性










