基于ssh密钥对,如何从私钥提取公钥?
ssh-keygen
OpenSSH 私钥(id_rsa、id_ed25519 等),最简单的方法是:
1 | ssh-keygen -y -f /path/to/id_private > /path/to/id_private.pub |
-y 会从私钥输出 OpenSSH 格式的公钥(可直接放到 ~/.ssh/authorized_keys)。
按私钥格式
1) OpenSSH 私钥(RSA / ECDSA / Ed25519 等)
命令(通用):
1 | ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub |
- 若私钥有 passphrase,会提示输入。
- 生成的
.pub可直接用于authorized_keys或上传到 Git 服务等。
验证公钥 fingerprint:
1 | ssh-keygen -lf ~/.ssh/id_rsa.pub |
把公钥加入远端 authorized_keys:
1 | cat ~/.ssh/id_rsa.pub | ssh user@host 'mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys' |
2) PEM 格式 RSA 私钥
如果是 -----BEGIN RSA PRIVATE KEY-----(PEM):
- 也可以用
ssh-keygen -y(OpenSSH 的私钥通常也能用)。 - 或用 OpenSSL 先导出公钥(PEM 格式):
1 | openssl rsa -in private.pem -pubout -out public.pem |
这会生成 PEM 格式的公钥(public.pem),若你需要 OpenSSH 单行公钥格式(ssh-rsa AAAA...),推荐直接用 ssh-keygen -y -f private.pem(如果可用)。
若 ssh-keygen -y 不兼容,再用 openssl + 转换工具(见下)——但通常不必复杂化。
3) 私钥是 PuTTY 的 .ppk
在 Windows / Putty 生态中:
1 | # 使用 puttygen(Windows / Linux 有 putty-tools) |
4) 私钥是 PKCS#8(新格式)
如果私钥是 PKCS#8(通常以 BEGIN PRIVATE KEY),ssh-keygen -y 多数情况下也能处理:
1 | ssh-keygen -y -f pkcs8_key > pkcs8_key.pub |
若遇到兼容性问题,可先用 openssl 转回传统格式再处理。
把 PEM 公钥转为 OpenSSH 单行格式
如果你已经有 public.pem(PEM 格式公钥),想要 OpenSSH 的 ssh-rsa AAAA... 格式,可以尝试:
1 | ssh-keygen -i -m PKCS8 -f public.pem > id_rsa_from_pem.pub |
(兼容性依发行版与 ssh-keygen 版本不同;通常 ssh-keygen -y -f privatekey 更稳妥)
示例
1 | # 1) 提取(OpenSSH 私钥) |
注意事项(要点)
不要把私钥传到远端/公共地方;只在本机提取公钥并传输公钥。
生成后检查权限:
1
2chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub若私钥被盗或泄露,立即废弃(从
authorized_keys删除旧公钥,重新生成密钥对)。SSH agent:如果私钥加了 passphrase,可用
ssh-add加载到 agent,提高交互体验。在自动化脚本中谨慎处理带密码的私钥(避免明文写入脚本)。
对于生产强合规/安全场景,推荐使用 Ed25519(更小、更安全)或使用硬件密钥(YubiKey)。