SSH突然返回无效格式


23

所以不久前,我在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

有没有什么办法解决这一问题?

Answers:


13

检查的内容(key_name如果座席说的是)invalid format,则说明密钥存在问题-如..您确定这是正确的密钥?即使它不是您需要的私钥,invalid format如果密钥正在工作,ssh代理也不会返回,您将无法连接。由于某种原因,您可能将公用密钥放在了那里。检查!


5
绝对检查。以开始,以----BEGIN RSA PRIVATE KEY-----结束-----END RSA PRIVATE KEY-----。再加上它曾经工作。
Gregor Menih

2
文件损坏的可能性极小,但仍然有可能。创建一个新文件,然后从lastpass再次填充内容。
13dimitar,2015年

2
哇,实际上有帮助!生成新密钥后,我注意到新密钥每行有64个字符,而我的旧密钥有76个。我将旧密钥重新格式化为每行仅64个字符,然后开始工作!我还缺少第一行的破折号。
Gregor Menih

2
“我还缺少第一行的破折号。” 同上。谢谢@ItsGreg。在终端之间进行选择和复制时,我经常会错过第一个字符!
starfry

15

我为解决此问题所做的工作是使用来转换PPK文件PuttyGen

首先加载urkey.PPK,然后在转换菜单上,单击导出为Openssh文件格式。它将创建newkey文件。

现在, ssh -i "newkey" user@127.0.0.1

做完了 希望能帮助到你。


4

我要求openssh通过在.ssh / config文件中指定它来使用特定的标识文件。

原始工作配置具有

IdentityFile = <path to public key file> 

这停止工作,没有任何更改。经过一点思考,我将上面的“公钥文件路径”替换为“私钥文件路径”。那行得通。理由是,根据RSA算法,公钥和私钥文件都具有大量与伪素相关的数字。如果用公用密钥文件替换专用密钥文件,则无法从保存在密钥文件内的base64块中正确提取这些密码。似乎ssh的某些版本可以找出.pub扩展名,并使用它来识别正确的私钥文件-其他版本则不能这样做。这是发生此错误的另一种方式。希望它可以帮助某人。


就我而言,我有安装config文件,path_to_public_key一切正常。但是,当Mac进行硬重启时,几天后,我尝试执行git push,我开始收到上述错误。但是当我现在将其更改为path_to_private_key可以正常工作时...嗯。不知道为什么..
路加克

3

我遇到了同样的问题,结果由于某种原因,我在文件中使用了Windows样式(CRLF)行分隔符。

此外,文件必须以单个LF结尾。

修复这些问题使事情再次变得花花公子。


令人震惊的是,最终的LF如此必要,但这确实是部分问题,而另一部分是我在Windows中创建了文件,这样做使CRLF换行了。供其他参考,dos2unix是用于将CRLF(Windows风格)转换为LF(Linux风格)换行符的命令。
Hashim

1

您应该将.ppk密钥转换为OpenSSH密钥

这是您的操作方式

  1. 下载PuttyGen并生成您的密钥对(如果尚未准备好密钥对)。将私钥保存到您的文件夹(.ppk)
  2. 如果您已经拥有私钥,请通过按“加载”按钮加载私钥文件(.ppk)。否则,请跳过此步骤
  3. 在菜单“转化”下,选择导出OpenSSH密钥,然后将其保存到您的文件夹中
  4. 现在,您可以使用密钥登录服务器而无需输入密码(我假设您已经将公共密钥放在/root/.ssh/authorized_keys,chmod 600 /root/.ssh/authorized_keys和重新启动SSH demon下)

1

今天,当我为我的CI管道编写一些git tag utils时遇到了这个问题。

这是我的两个键之间的区别:

$ diff ~/.ssh/gitlab ~/.ssh/git_ssh_key
27c27
< -----END OPENSSH PRIVATE KEY-----
---
> -----END OPENSSH PRIVATE KEY-----
\ No newline at end of file

我这样更改了代码:

     with open(ssh_key_file, 'w') as skf:
-        skf.write(ssh_key)
+        skf.write(ssh_key + '\n')

现在我的ssh密钥起作用了。

TL; DR-我想您必须在私钥的末尾添加换行符。


1

就我而言,事实证明我在开始/结束“标头”和关键数据之间有换行符:

-----BEGIN RSA PRIVATE KEY-----

- Key data here -

-----END RSA PRIVATE KEY-----

删除多余的新行,因此成为

-----BEGIN RSA PRIVATE KEY-----
- Key data here -
-----END RSA PRIVATE KEY-----

解决了我的问题。


0

使用您的私钥而不是公钥。


相同的解决方案,我的回答-其中还添加了一个解释
vpathak

0

我遇到了这个问题,因为我在〜/ .ssh中有一个密钥,它实际上是一种无效格式,并且我有很多密钥,这意味着即使我在命令中指定了身份文件,SSH还是尝试了所有密钥。它恰好失败了,因为它只能尝试5个键,然后让我留下那个错误,这是合法的,只是针对错误的身份文件。解决的办法是只IdentitiesOnly yes在我的〜/ .ssh / config中使用。


0

我遇到此错误是因为密钥文件开头没有空白行。如果您想cat出去的话很容易错过。


0

如果私钥上有密码短语,并且尝试连接时输入的密码短语错误,这也是ssh(至少某些版本)发出的错误。

(特别是这发生在我身上:OpenSSH_7.6p1,LibreSSL 2.6.2,这是Mac OS X 10.13.6的内置SSH。)

因此,请仔细检查您使用的密码是否正确,并且CAPS LOCK已关闭。


-2

确保您重命名PRIVATE密钥并删除问题的文件扩展名。

我采取的步骤

创建您的公钥:

确保您在拥有私钥的目录中

如何创建公钥:

ssh-keygen -y -f Private-Key.pem > Public-key.pub

确保PUBLIC密钥具有.pub文件扩展名

之后出于安全原因提供适当的权限:

chmod 600 Private-Key.pem
chmod 400 Public-key.pub

然后最重要的部分以及您收到错误“无效格式”的原因

确保重命名PRIVATE密钥并删除文件扩展名:

从私钥中删除.pem。

mv Private-Key.pem Private-Key

或者,如果在Windows计算机上重命名私钥,则只需删除 .pem

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.