所以不久前我在 AWS 上设置了一个服务器,并使用了他们生成的 SSH 密钥。我将密钥保存到 Lastpass,并且之前已经成功地从那里检索到它,并让它工作。但是,在今天再次尝试之后,我无法让它工作。
-rw------- 1 itsgreg users 1674 Jun 6 12:51 key_name
我试过ssh -i key_name
, ssh-keygen -f key_name
,但没有任何效果,我总是收到以下错误消息:
Load key "key_name": invalid format
有没有什么办法解决这一问题?
从 openssh 7.6 开始,它默认为一种新的更安全的格式。您可以使用以下命令强制将其转换为该格式以更改您的密钥密码。如果您没有和/或不想要密码,您只需按 Enter 键,它仍会以新格式重写密钥
我遇到了同样的问题,事实证明由于某种原因我在文件中有 Windows 样式(CRLF)的行分隔符。
此外,文件必须以单个 LF 结尾。
修复那些让事情再次变得花花公子。
检查 的内容
key_name
,如果代理说invalid format
,那么密钥有问题 - 比如 .. 你确定那是正确的密钥吗?即使它不是您需要的私钥,invalid format
如果密钥有效,ssh 代理也不会返回,您根本无法连接。出于某种原因,您可能已将您的公钥放在那里。核实!我通过使用 PuTTY 密钥生成器将私钥转换为OpenSSH 格式在 Windows 中解决了这个问题。
PuTTYgen
my.ppk
Conversions
|Export OpenSSH key
my_openssh.ppk
现在这有效:
Mac 转换:(感谢@ChrisGillatt)
如果您收到有关无效公钥格式的警告但该命令仍然有效,则可能是因为您只有一个私钥文件并且使用的是 OpenSSH 8.3。
OpenSSH 8.3 包含对 ssh 客户端的更改,它在其中查找私钥的相应公钥文件并输出此
load pubkey "/home/user/.ssh/id.rsa": invalid format
警告,但继续成功连接。使用 ssh 的工具,例如scp
或git
可能显示key_load_public: invalid format
.客户端连接时不需要公钥,只需要私钥。所以这个检查是没有意义的,它已经被上游提交删除了,但还没有发布。
ArchLinux 论坛上对此进行了讨论。
就我而言,事实证明我在开始/结束“标题”和关键数据之间有换行符:
删除额外的新行,所以它变成了
解决了我的问题。
我今天刚刚在为我的 CI 管道编写一些 git 标记工具时遇到了这个问题。
这是我的两个键之间的区别:
我像这样更改了我的代码:
现在我的 ssh 密钥可以工作了。
TL;DR - 我猜你必须在你的私钥末尾有一个换行符。
在 Fedora 32 最近更新后,我在连接到远程主机时开始收到此警告。
我解决了将pkcs11:添加到.ssh/config中的IdentityFile参数的问题,如下所示:
作为参考,摘自 ssh_config 手册页:
我要求 openssh 通过在 .ssh/config 文件中指定特定身份文件来使用它。
原来的工作配置有
这停止工作而没有任何更改。经过一番思考,我将上面的“公钥文件的路径”替换为“私钥文件的路径”。那行得通。原因是,根据 RSA 算法,公钥和私钥文件都具有大量与伪素数相关的数字。如果您将私钥文件替换为公钥文件,这些加密数字将无法从保存在密钥文件中的 base64 块中正确提取。似乎某些版本的 ssh 可以找出 .pub 扩展名并使用它来识别正确的私钥文件 - 而其他版本则不这样做。这是此错误发生的另一种方式。希望它可以帮助某人。
就我而言,发生这种情况是因为我在 DEK-Info 和实际关键数据之间缺少一个空白行。我有:
但它必须是: