You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSL中OpenSSH_8.9p1 Ubuntu-3ubuntu0.7版本的ssh-keygen无法读取自身生成的RFC4716格式密钥

WSL中OpenSSH_8.9p1 Ubuntu-3ubuntu0.7版本的ssh-keygen无法读取自身生成的RFC4716格式密钥

嘿,我之前也踩过这个坑!其实问题出在对ssh-keygen的-m参数的理解偏差上——当你用ssh-keygen生成密钥对时,-m RFC4716只会控制公钥的输出格式,私钥依然会生成OpenSSH原生格式,这就是为什么你后续用-i导入时会触发格式错误。

问题根源拆解

你执行的生成命令:

ssh-keygen -f id_rsa -m RFC4716 -N ''

这个命令生成的id_rsa文件是标准的OpenSSH私钥(开头是-----BEGIN OPENSSH PRIVATE KEY-----),只有对应的id_rsa.pub才是RFC4716格式的公钥。当你用ssh-keygen -i去读取这个私钥文件时,它会尝试把非OpenSSH格式的密钥转换成原生格式,但你给的本来就是原生私钥,自然会报错。

解决方法

如果你需要生成RFC4716格式的私钥,得分两步操作:

  1. 先生成原生OpenSSH密钥对(也可以直接用你已生成的那组)
  2. 用-p参数将私钥转换为RFC4716格式

具体命令如下:

cd /tmp/some_directory
# 1. 生成原生OpenSSH密钥对(如果已经有了可以跳过这步)
ssh-keygen -f id_rsa -N ''
# 2. 将私钥转换为RFC4716格式,-N ''保持密码为空
ssh-keygen -p -f id_rsa -m RFC4716 -N ''

转换完成后,再执行导入命令:

ssh-keygen -i -f id_rsa -m RFC4716

就不会再出现do_convert_from_ssh2: parse key: invalid format的错误了,此时id_rsa文件的开头会变成-----BEGIN SSH2 PRIVATE KEY-----,是标准的RFC4716格式私钥。

额外提醒

ssh-keygen的-m参数在不同场景下作用不同:

  • 生成密钥(无-i/-e/-p参数):仅控制公钥的格式
  • 修改密钥(-p)或导入/导出(-i/-e):控制私钥的格式

这个小细节很容易被忽略,希望能帮到你!

备注:内容来源于stack exchange,提问作者YSC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 09:08:14