所以不久前我在 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
有没有什么办法解决这一问题?
小智 58
从 openssh 7.6 开始,它默认为一种新的更安全的格式。您可以使用以下命令强制将其转换为该格式以更改您的密钥密码。如果您没有和/或不需要密码,只需按 Enter 键,它仍会以新格式重写密钥
ssh-keygen -f ~/.ssh/id_rsa -p
Run Code Online (Sandbox Code Playgroud)
13d*_*tar 34
检查 的内容key_name,如果代理说invalid format,那么密钥有问题 - 比如 .. 你确定那是正确的密钥吗?即使它不是您需要的私钥,invalid format如果密钥有效,ssh 代理也不会返回,您将无法连接。出于某种原因,您可能已经将您的公钥放在那里。核实!
AKX*_*AKX 33
我遇到了同样的问题,结果由于某种原因,我在文件中使用了 Windows 样式 (CRLF) 行分隔符。
此外,文件必须以单个 LF 结尾。
修复这些让事情再次变得花花公子。
小智 26
我通过使用 PuTTY 密钥生成器将私钥转换为OpenSSH 格式,在 Windows 中解决了这个问题。
PuTTYgenmy.ppkConversions | Export OpenSSH keymy_openssh.ppk现在这有效:
ssh -i "my_openssh.ppk" user@example.com
Run Code Online (Sandbox Code Playgroud)
Mac 转换:(感谢@ChrisGillatt)
brew install putty
puttygen ~/.ssh/my.ppk -O private-openssh -o ~/.ssh/my_openssh.ppk
Run Code Online (Sandbox Code Playgroud)
sta*_*fry 18
如果您收到有关公钥格式无效的警告,但该命令仍然有效,则可能是因为您只有一个私钥文件并且使用的是 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 论坛上有一个关于这个的讨论。
小智 10
我今天刚刚在为我的 CI 管道编写一些 git 标记实用程序时遇到了这个问题。
这是我的两个键之间的区别:
$ diff ~/.ssh/gitlab ~/.ssh/git_ssh_key
27c27
< -----END OPENSSH PRIVATE KEY-----
---
> -----END OPENSSH PRIVATE KEY-----
\ No newline at end of file
Run Code Online (Sandbox Code Playgroud)
我像这样改变了我的代码:
with open(ssh_key_file, 'w') as skf:
- skf.write(ssh_key)
+ skf.write(ssh_key + '\n')
Run Code Online (Sandbox Code Playgroud)
现在我的 ssh 密钥有效了。
TL;DR - 我猜你必须在你的私钥末尾有一个换行符。
小智 10
在 Fedora 32 最近更新后,我在连接到远程主机时开始收到此警告。
我解决了将pkcs11:添加到我的.ssh/config 中的IdentityFile参数的问题,如下所示:
IdentityFile pkcs11:~/.ssh/my_key.pem
Run Code Online (Sandbox Code Playgroud)
作为参考,摘自 ssh_config 手册页:
身份验证身份也可以以 PKCS#11 URI 的形式指定,以字符串 pkcs11: 开头。
小智 8
就我而言,事实证明我在开始/结束“标题”和关键数据之间有换行符:
-----BEGIN RSA PRIVATE KEY-----
- Key data here -
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)
删除额外的新行,所以它变成了
-----BEGIN RSA PRIVATE KEY-----
- Key data here -
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)
解决了我的问题。
小智 6
我要求 openssh 通过在 .ssh/config 文件中指定它来使用特定的身份文件。
原来的工作配置有
IdentityFile = <path to public key file>
Run Code Online (Sandbox Code Playgroud)
这在没有任何更改的情况下停止工作。稍微思考了一下,我将上面的“公钥文件路径”替换为“私钥文件路径”。那奏效了。原因是根据 RSA 算法,公钥和私钥文件都具有大的拟素相关数。如果用公钥文件替换私钥文件,这些加密数字将无法从保存在密钥文件中的 base64 块中正确提取。似乎某些版本的 ssh 可以找出 .pub 扩展名并使用它来识别正确的私钥文件 - 而其他版本则不会这样做。这是发生此错误的另一种方式。希望它可以帮助某人。
小智 6
就我而言,发生这种情况是因为我在 DEK-Info 和实际关键数据之间缺少一个空行。我有:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,6E6F6E65206F6620796F757220627573
VGhpcyBpcyBub3QgbXkgYWN0dWFsIGtleSBzb3JyeSB0byBkaXNhcHBvaW50IHlv
...
Run Code Online (Sandbox Code Playgroud)
但它需要是:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,6E6F6E65206F6620796F757220627573
VGhpcyBpcyBub3QgbXkgYWN0dWFsIGtleSBzb3JyeSB0byBkaXNhcHBvaW50IHlv
...
Run Code Online (Sandbox Code Playgroud)
小智 5
您应该将 .ppk 密钥转换为 OpenSSH 密钥
操作方法如下:
我在 Win32-OpenSSH 8.1 中遇到了兼容性问题。
这里的答案都不适合我,所以我找到了自己的方法:使用 PuTTYgen 实用程序将密钥转换为新格式。
puttygen| 归档时间: |
|
| 查看次数: |
279956 次 |
| 最近记录: |