当前位置: 首页 > 知识库问答 >
问题:

密钥\u加载\u公共:格式无效

翁昊乾
2023-03-14

我使用PuTTY密钥生成器生成了一个4096位RSA-2密钥,其中包含一个密码短语。

我保存了. ppk和一个openSSL格式的公钥。油灰格式公钥不起作用。

无论如何,我的错误如下:

$ ssh -T git@github.com
key_load_public: invalid format
Enter passphrase for key '/c/Users/Dan/.ssh/id_rsa':
Hi Dan! You've successfully authenticated, but GitHub does not provide shell access.

有什么问题吗?

我使用Pageant来加载密钥,我使用Git Bash来尝试ssh连接。我也把密钥加载到GitHub,不知道我做错了什么。

我尝试在GitHub中添加新行,但没有添加新行

共有3个答案

翁宏茂
2023-03-14

TL;DR:还要确保您的id\u rsa。pub采用ascii/UTF-8格式。

我也有同样的问题,但是仅仅接受的答案并不起作用,因为文本编码是一个额外的、容易错过的问题。

当我奔跑时

ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pub

在Windows PowerShell中,它以UTF-16 LE BOM编码将输出保存到id_rsa.pub,而不是UTF-8。这是PowerShell的一些安装的属性,在使用PowerShell在UTF-8中编写没有BOM的文件中讨论过。显然,OpenSSH不能识别以前的文本编码,并产生相同的错误:

key_load_public: invalid format

ssh-keygen-f~/. ssh/id_rsa-y的输出复制粘贴到文本编辑器中是解决这个问题的最简单方法。

顺便说一句,这可能是对公认答案的补充,但我还没有足够的业力在这里发表评论。

景胜涝
2023-03-14

有一个简单的解决方案,如果你可以安装和使用putygen工具。以下是步骤。您应该有私钥的密码。

步骤1:下载最新puttygen并打开puttygen

步骤2:加载现有的私钥文件,请参见下图

第3步:输入关键字的密码,如果问并点击确定

步骤4:如下图所示,选择“转换”菜单选项卡,并选择“导出OpenSSH键”

在首选位置保存新的私钥文件并相应地使用。

殷功
2023-03-14

正如Roland在他们的回答中提到的,这是一个警告,ssh-agent不理解公钥的格式,即使这样,公钥也不会在本地使用。

然而,我也可以详细说明和回答为什么有警告。它简单地归结为这样一个事实,即PuTTY密钥生成器根据您在程序中的操作生成两种不同的公钥格式。

注意:在我的整个解释中,我将使用/生成的关键文件将被命名为id_rsa及其适当的扩展名。此外,为了方便复制粘贴,键的父文件夹将被假定为~/. ssh/。根据需要调整这些细节以满足您的需求。

链接到相关腻子文档

当您使用PuTTY密钥生成器使用“保存公钥”按钮保存密钥时,它将以RFC 4716定义的格式保存。

例子:

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "github-example-key"
AAAAB3NzaC1yc2EAAAABJQAAAQEAhl/CNy9wI1GVdiHAJQV0CkHnMEqW7+Si9WYF
i2fSBrsGcmqeb5EwgnhmTcPgtM5ptGBjUZR84nxjZ8SPmnLDiDyHDPIsmwLBHxcp
pY0fhRSGtWL5fT8DGm9EfXaO1QN8c31VU/IkD8niWA6NmHNE1qEqpph3DznVzIm3
oMrongEjGw7sDP48ZTZp2saYVAKEEuGC1YYcQ1g20yESzo7aP70ZeHmQqI9nTyEA
ip3mL20+qHNsHfW8hJAchaUN8CwNQABJaOozYijiIUgdbtSTMRDYPi7fjhgB3bA9
tBjh7cOyuU/c4M4D6o2mAVYdLAWMBkSoLG8Oel6TCcfpO/nElw==
---- END SSH2 PUBLIC KEY ----

与普遍的看法相反,这种格式不会被生成器保存。然而,它会生成并显示在标题为“粘贴到OpenSSHauthorized_keys文件的公钥”的文本框中。要将其保存为文件,您必须手动从文本框中复制它,并将其粘贴到新的文本文件中。

对于上面显示的关键字,这将是:

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAhl/CNy9wI1GVdiHAJQV0CkHnMEqW7+Si9WYFi2fSBrsGcmqeb5EwgnhmTcPgtM5ptGBjUZR84nxjZ8SPmnLDiDyHDPIsmwLBHxcppY0fhRSGtWL5fT8DGm9EfXaO1QN8c31VU/IkD8niWA6NmHNE1qEqpph3DznVzIm3oMrongEjGw7sDP48ZTZp2saYVAKEEuGC1YYcQ1g20yESzo7aP70ZeHmQqI9nTyEAip3mL20+qHNsHfW8hJAchaUN8CwNQABJaOozYijiIUgdbtSTMRDYPi7fjhgB3bA9tBjh7cOyuU/c4M4D6o2mAVYdLAWMBkSoLG8Oel6TCcfpO/nElw== github-example-key

密钥的格式简单地为ssh-rsa

如果您正在使用ssh-agent,您可能还可以访问ssh-keygen

如果您拥有OpenSSH私钥(id\u rsa文件),则可以使用以下方法生成OpenSSH公钥文件:

ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pub

如果您只有PUTTY私钥(id\u rsa.ppk文件),则需要首先转换它。

  1. 打开腻子键生成器

现在您有了OpenSSH私钥,可以使用上面的ssh-keygen工具对密钥执行操作。

老实说,我不知道这把钥匙是用来干什么的,因为我不需要它。但是我把它放在我多年来整理的笔记里,为了有益健康,我会把它放在这里。该文件将如下所示:

-----BEGIN RSA PUBLIC KEY-----
MIIBCAKCAQEAhl/CNy9wI1GVdiHAJQV0CkHnMEqW7+Si9WYFi2fSBrsGcmqeb5Ew
gnhmTcPgtM5ptGBjUZR84nxjZ8SPmnLDiDyHDPIsmwLBHxcppY0fhRSGtWL5fT8D
Gm9EfXaO1QN8c31VU/IkD8niWA6NmHNE1qEqpph3DznVzIm3oMrongEjGw7sDP48
ZTZp2saYVAKEEuGC1YYcQ1g20yESzo7aP70ZeHmQqI9nTyEAip3mL20+qHNsHfW8
hJAchaUN8CwNQABJaOozYijiIUgdbtSTMRDYPi7fjhgB3bA9tBjh7cOyuU/c4M4D
6o2mAVYdLAWMBkSoLG8Oel6TCcfpO/nElwIBJQ==
-----END RSA PUBLIC KEY-----

该文件可以使用OpenSSH私钥生成(如在上面的“再生公钥”中生成的),使用:

ssh-keygen -f ~/.ssh/id_rsa -y -e -m pem > ~/.ssh/id_rsa.pem

或者,您可以使用OpenSSH公钥,方法是:

ssh-keygen -f ~/.ssh/id_rsa.pub -e -m pem > ~/.ssh/id_rsa.pem

##参考资料:##

  • “密钥\u加载\u公共:格式无效…”关于AskUbuntu
  • Secure Shell(SSH)公钥文件格式
  • 转换OpenSSH公钥

 类似资料:
  • 我试图克隆一个回购,其中有子模块。主回购是克隆罚款,但当我做在dockerfile子模块抛出和错误。 在图像中我有这个 我无法控制子模块。我不确定是否可以从到https以获取子模块。 我甚至尝试使用route 下面是构建命令的一部分。 请帮帮忙。这很令人沮丧(

  • 我正在使用GitLab为我的django项目构建CI/CD。作为我部署阶段的一部分,我有 构建在ssh add ~/处崩溃。ssh/id\u rsa

  • 我正在使用“BouncyCastle.NetCore”和“JoseJwt”库对web令牌进行签名和加密。我可以通过以下代码使用私钥签名。但要求也要执行OpenID JWT加密,以便加密JWT有效负载,我们需要使用提供的公钥字符串(使用X509密钥规范解码的base64)进行加密。使用RSA算法和JWE标头所需的编码应包括标头名称“alg”,值为:RSA\u OAEP\u 256。以下代码仅使用私钥

  • 运行,我得到以下错误: 我做了问题25596504中建议的更正,特别是更改了文件至运气不好。我遵循Hartl教程第688页,该页指定将它们添加为

  • 我连接MySQL-8.0与MySQL工作台,并得到以下错误: 无法加载身份验证插件caching_sha2_password:dlopens(/usr/本地/mysql/lib/plugin/caching_sha2_password.so,2):找不到图像 我也尝试过其他客户端工具。 有什么解决办法吗?

  • 在PHP应用程序中,我指定 输出数据格式如预期2020-01-31 21:21:47但当我添加 NLS\U DATE\U格式不生效,NLS\U TERRITORY将覆盖该格式。31.01.20