OpenSSH_8.9p1 Ubuntu-3ubuntu0.7
在 WSL 上使用,ssh-keygen
拒绝之前生成的密钥,输出错误:
do_convert_from_ssh2:解析密钥:格式无效
再生产
$ cd /tmp/some_directory
$ ssh-keygen -f id_rsa -m RFC4716 -N ''
[... nominal output ...]
$ ssh-keygen -i -f id_rsa -m RFC4716
do_convert_from_ssh2: parse key: invalid format
$ ssh-keygen -i -f id_rsa
do_convert_from_ssh2: parse key: invalid format
由于这是一个测试/废弃的私钥,我可以与您分享:
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
NhAAAAAwEAAQAAAYEA9M/XxwykVVEXmXFTJl7Dbn5lhfnYhY94nDquc8dfuE00AnRMuL6d
OG+bPWf916ku/++eWz/Epb/W7DsbAd0YNx4C2L0Rd/EqGzQr6TCM4fgLkXd2h98wOQ24yJ
D/Wy7fYlp/hAPomrx50cR29TmAG4yopCPOMc1aPUjylMJHPflbm0icEeh7R/rFKA2OSUj9
LD0GCgQb1TLSyQ6BgrustkDMbzF52j4k3g/PSvzmMpoFg4HI61OecS4wxwwANi+kiXC/FS
AUEWhxuHt45B5SwkSGhskD0yCE/RLQhcrqZb4H3dwabDCkbc1bXGIyoE1okDy9PJakG65Z
xSR1QzZqNarr1+lvMPcftwxzOePeTyqMgmoYujXCGv7ehdsyFkDSth0zrcylW9EVuADnSS
DFVcgbdxPj8mVJ0txO7Pn4ksfo/muR8RCI8yHvlM/doZcgq38IhWzh0WpJAJbQPI/RK8ia
w8h+6jGr/EGoNjtApAXXgpwMLiEagj5ut0lWpYiTAAAFiGhq6YVoaumFAAAAB3NzaC1yc2
EAAAGBAPTP18cMpFVRF5lxUyZew25+ZYX52IWPeJw6rnPHX7hNNAJ0TLi+nThvmz1n/dep
Lv/vnls/xKW/1uw7GwHdGDceAti9EXfxKhs0K+kwjOH4C5F3doffMDkNuMiQ/1su32Jaf4
QD6Jq8edHEdvU5gBuMqKQjzjHNWj1I8pTCRz35W5tInBHoe0f6xSgNjklI/Sw9BgoEG9Uy
0skOgYK7rLZAzG8xedo+JN4Pz0r85jKaBYOByOtTnnEuMMcMADYvpIlwvxUgFBFocbh7eO
QeUsJEhobJA9MghP0S0IXK6mW+B93cGmwwpG3NW1xiMqBNaJA8vTyWpBuuWcUkdUM2ajWq
69fpbzD3H7cMcznj3k8qjIJqGLo1whr+3oXbMhZA0rYdM63MpVvRFbgA50kgxVXIG3cT4/
JlSdLcTuz5+JLH6P5rkfEQiPMh75TP3aGXIKt/CIVs4dFqSQCW0DyP0SvImsPIfuoxq/xB
qDY7QKQF14KcDC4hGoI+brdJVqWIkwAAAAMBAAEAAAGAaYWHDBiyYsXz5qNWxGS3V1Kq/v
8s6ZDoW2rd1DDdXOsGHoKzqTQcP323y9WdsE4P4KiPuOQ5JnqUsLlfUEPVErjgYDzKoUj1
rckknjxblXEdx2NXV4SH3CfCfM0nDE4dYl8AtM4cfkn8NkM5RUU2J2nPLQTz9Tp/CYh+a0
l8fMWVS08WWo+7R9DbF4MUUBliayWYi0uvFYv1GE2k3E15ygsPM2R/kecUbBUjdD6jGK+T
7dXM3UZrNnzC8KEHHFQW/4cw4lnpNeRPpu91OGCWFAIzMOtbcysUQjSB2nskmpK9hdK2IJ
jucaKccTEz+ROutMC1JIa65/DItQkYdga7YWh2O6Pb2jUKhs1VIWMIgegVrL0g3axgDbEq
rN44uMwDrPpbT1udSc5NFZVapewUUZkOKtw6HFqy+GHJcjJpMgo1rwZH3dMaBSxn2X5tZD
IBHOXITgHfX+bDfE6FcWuwu+kZQDPTLLVGVMd7Ss7ClykIvDi0oC5wgsFwGFpzgMlBAAAA
wQDCSLH1Y0Ux/FzunxilEh1U12R5uyK5GAnd17i90TMMVnR0ufBxkv8RW2qLlNnZHvi84v
YqryChLoq/f9qy9W/HpYCzObhyVej4nhvXtCiYMfl7527FL83uGs29BEe1YVp8EavgXqrR
1qgwdsXH+W0jJtWzV+NhblfWULiV8iuOMfeLm15SZ/40P5c9XgAnBhyMgE22LynZEUrfvq
90VyubjPX5/8R8goUSn1wuRC4o333QbYguVmKqRh02ZFMI9igAAADBAPjAvzz9RLTWuQMh
Tib0uuH+AsRb8ExOg0xXiFazjmt/9iDi3GnFUbuxzeCntCKIXvGlcwH+KvroekeIHcqnac
054o/6dH21gJX6FxkleBjPOXXYipHSSpqg7GX97gtQDajzyzKR7KFru+3Nxdvc13Xkd+Op
R6WJoeNAnoaVJMtLGPrtJWc/ywrgLbKGA73hKoecQmwlKaspvBVZNyehzg+2o6Pxl1hChb
y+rpgsGpgHKbTLSIQEmA52dUZgGjjS0wAAAMEA+/Gz6hKHXxfJQRERaAlLkKaC3HiXXdp2
Zx10aKDuQuI+TVYBdL7qHDScDY4kHkONEOoO3QN6d7v5umBGpBHyCckxvBhKWpTZTDzCUY
HXLjoWU/EG68Nj+vh3R0Xx8QY7/ccqDYnW/P/ZFz/ByLLbDOBR2Nu25dC/FdAiiEeR9+U2
18gTSBKCX6jYx/SAkbAMzBE8LM7eTw8bXIxP3MXvysuZQMWKxT8ArL4lxX+WS3izcEBAbr
hb486LxiNlPVtBAAAAEnlzY0BMVDBQQVIwMTA5MjkzMA==
-----END OPENSSH PRIVATE KEY-----
(注意:行正确地由单个 0x0a 分隔,并且文件正确地显示了最终的 0x0a)
我的最终目标是将这个密钥转换为与openssl pkeyutl -decrypt -inkey ${converted_key_file}
.我究竟做错了什么?
与它的文档所述相反,OpenSSH 的 ssh-keygen 只能导入“RFC4716”(SSH.COM)私钥,但不能写入它们,因此它写入的密钥是OpenSSH 格式 - 而不是您的 RFC4716 格式现在要求它阅读。
-----BEGIN OPENSSH PRIVATE KEY-----
---- BEGIN SSH2 ENCRYPTED PRIVATE KEY ----
-----BEGIN PRIVATE KEY-----
-----BEGIN RSA PRIVATE KEY-----
(顺便说一句,RFC 4716 仅指定公钥的格式,而不指定私钥的格式。尽管存在相应的私钥格式,但它并未作为 IETF 标准发布,这可能是 OpenSSH 不支持的原因之一写出这样的键。)
但最重要的是,就您将其与 OpenSSL 工具一起使用的目标而言,这种格式将毫无用处。这不是OpenSSL使用的“PEM”密钥格式 – RFC4716 基本上是“Tectia SSH / VanDyke SecureCRT / MultiNet SSH”密钥类型,尽管外观看起来大致相似,但内部是完全不同的格式。
PuTTY确实支持以“RFC4716”格式编写私钥(更准确地称为“ssh.com”格式),因此如果您需要将密钥对与 SecureCRT 或 Tectia SSH 一起使用,您可以使用
puttygen -O private-sshcom
.但由于您想将密钥与 OpenSSL 一起使用,因此您应该将其转换为
PKCS8
或PEM
格式。 (两者都由 OpenSSL 原生支持 - PKCS8 是 OpenSSL 1.1/3.x 生成的更现代的格式,而 PEM 是 OpenSSL ≤1.0 用于生成的“传统”格式;它也恰好是 ssh-keygen 生成的格式用于生成。)生成 PKCS#8 格式的新密钥:
将现有密钥转换为 PKCS#8 格式:
或者,如果使用 OpenSSL 生成密钥,您将获得完全相同的结果(因为毕竟您拥有
openssl
可用的工具):新语法:
旧语法:
(默认情况下将输出 PKCS#8 密钥;用于
-traditional
输出 PEM 密钥。)如果您已有“RFC4716”SSH.COM 私钥,则可以使用以下方法将其转换为 OpenSSL 兼容格式:
OpenSSH 使用
-i
选项:(总是生成 PEM – 他们忘记添加新格式的选项 – 但您可以通过管道
openssl pkey
获取 PKCS#8。)PuTTYgen(将 PEM 称为“OpenSSH 格式”,因为它曾经是OpenSSH 拥有的唯一格式 - 不要与“OpenSSH 格式(新)”混淆,后者是实际的 OpenSSH 格式):