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格式的私钥,得分两步操作:
- 先生成原生OpenSSH密钥对(也可以直接用你已生成的那组)
- 用
-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
相关产品推荐
相关产品推荐

