我使用PuTTY密钥生成器生成带密码的4096位RSA-2密钥。
我保存.ppk和openSSL格式的公钥。 putty格式的公钥不起作用。
无论如何,我的错误如下:
$ 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中添加新行
答案 0 :(得分:105)
作为答案中提到的Roland,警告ssh-agent
不了解公钥的格式,即使这样,公钥也不会在本地使用。
但是,我也可以详细说明并回答警告的原因。它简单地归结为 PuTTY密钥生成器生成两种不同的公钥格式,具体取决于您在程序中执行的操作。
注意:在我的解释中,我将使用/生成的密钥文件将以适当的扩展名命名为id_rsa
。此外,为了方便复制粘贴,键的父文件夹将被假定为~/.ssh/
。根据需要调整这些细节以满足您的需求。
Link to the relevant PuTTY documentation
使用“保存公钥”按钮使用 PuTTY Key Generator 保存键时,它将以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 ----
与流行的看法相反,这种格式不会被生成器保存。但是它会生成并显示在标题为“粘贴到OpenSSH authorized_keys文件的公钥”的文本框中。要将其另存为文件,您必须从文本框中手动复制它并将其粘贴到新的文本文件中。
对于上面显示的键,这将是:
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAhl/CNy9wI1GVdiHAJQV0CkHnMEqW7+Si9WYFi2fSBrsGcmqeb5EwgnhmTcPgtM5ptGBjUZR84nxjZ8SPmnLDiDyHDPIsmwLBHxcppY0fhRSGtWL5fT8DGm9EfXaO1QN8c31VU/IkD8niWA6NmHNE1qEqpph3DznVzIm3oMrongEjGw7sDP48ZTZp2saYVAKEEuGC1YYcQ1g20yESzo7aP70ZeHmQqI9nTyEAip3mL20+qHNsHfW8hJAchaUN8CwNQABJaOozYijiIUgdbtSTMRDYPi7fjhgB3bA9tBjh7cOyuU/c4M4D6o2mAVYdLAWMBkSoLG8Oel6TCcfpO/nElw== github-example-key
密钥的格式只是ssh-rsa <signature> <comment>
,可以通过重新排列SSH-2格式的文件来创建。
如果您正在使用ssh-agent
,则可能还可以访问ssh-keygen
。
如果您有OpenSSH私钥(id_rsa
文件),则可以使用以下命令生成OpenSSH公钥文件:
ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pub
如果您只拥有PUTTY私钥(id_rsa.ppk
文件),则需要先将其转换。
id_rsa.ppk
文件id_rsa
(不带扩展名)现在您已拥有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
答案 1 :(得分:9)
TL; DR:还要确保您的id_rsa.pub
使用ascii / UTF-8。
我遇到了同样的问题,但是单独的the accepted answer不能工作,因为文本编码是另外一个容易错过的问题。
我跑步时
ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pub
在Windows PowerShell中,它以 UTF-16 LE BOM 编码而不是 UTF-8 将输出保存到id_rsa.pub
。这是某些安装的PowerShell的属性,已在Using PowerShell to write a file in UTF-8 without the BOM中进行了讨论。显然,OpenSSH无法识别以前的文本编码并产生相同的错误:
key_load_public: invalid format
将ssh-keygen -f ~/.ssh/id_rsa -y
的输出复制并粘贴到文本编辑器中是解决此问题的最简单方法。
P.S。这可能是对the accepted answer的补充,但是我在这里没有足够的业力可以发表评论。
答案 2 :(得分:5)
似乎ssh
无法读取您的公钥。但这并不重要。
您将公钥上传到github,但您使用私钥进行身份验证。参见例如ssh(1)
中的FILES部分。
答案 3 :(得分:3)
如果您使用剪贴板复制公钥并将其粘贴,则可能会破坏包含换行符的公钥字符串。
确保您的公钥字符串形成一行。
答案 4 :(得分:1)
代替直接保存私钥,请转到“转换和导出SSh密钥”。 遇到同样的问题,这对我有用
答案 5 :(得分:1)
有一个简单的解决方案,如果您可以安装和使用puttygen工具。以下是步骤。您应该具有私钥的密码。
步骤1: 下载最新的puttygen并打开puttygen
步骤2: 加载现有的私钥文件,请参见下图
第3步:如果要求输入密钥密码,然后单击确定
步骤4:如下图所示,选择“转换”菜单选项卡,然后选择“导出OpenSSH密钥”
将新的私钥文件保存在首选位置并相应地使用。
答案 6 :(得分:1)
该错误具有误导性-指向私钥文件pubkey
时显示“ ~/.ssh/id_rsa
”。
在我的情况下,这仅仅是一个丢失的公共密钥(因为我还没有从文件库中恢复它)。
我过去常常通过自动脚本跳过部署~/.ssh/id_rsa.pub
。
所有ssh
用法都可以使用,但是错误使我想到了可能的混乱情况。
一点也不-strace
帮助注意到触发器实际上是 *.pub
文件:
strace ssh example.com
...
openat(AT_FDCWD, "/home/uvsmtid/.ssh/id_rsa.pub", O_RDONLY) = -1 ENOENT (No such file or directory)
...
write(2, "load pubkey \"/home/uvsmtid/.ssh/"..., 57) = 57
load pubkey "/home/uvsmtid/.ssh/id_rsa": invalid format
答案 7 :(得分:0)
我也有同样的警告。这是一个非常古老的钥匙。我在当前的OpenSSH 7上重新生成了一个密钥,该错误消失了。
答案 8 :(得分:0)
因此,更新后,我遇到了同样的问题。我当时使用的是不带扩展名的PEM key_file
,而仅添加.pem
就解决了我的问题。现在文件为key_file.pem
。
答案 9 :(得分:0)
如果您将Windows 10与内置SSH一起使用,则截至2020年8月,它仅支持ed25519密钥。如果您使用例如,会出现d2
错误。 RSA密钥。
根据this GitHub issue,应在2020年通过Windows Update对其进行修复。因此,一种解决方案是仅等待更新发布。
如果迫不及待,一种解决方法是生成一个新的ed25519密钥,即good advice anyway。
d2-d1
您可以将其与例如github,但某些较旧的系统可能不支持此新格式。
生成密钥后,如果您使用以下任一功能,请不要忘记对其进行更新!
d1 = {'Rash': '80000000', 'Kil': '80000020', 'Varsha': '80000020', 'sam': '80010000'}
d2 = {'Varsha': '8000ffe0', 'sam': '80014000', 'Kil': '8000ffe0', 'Rash': '801fffff'}
d3 = {key: d2[key] - d1.get(key, 0) for key in d2}
print(d3)
可能仍指向旧密钥。key_load_public: invalid format
命令将新密钥添加到ssh-agent 答案 10 :(得分:0)
@uvsmtid 您的帖子终于让我找到了正确的 direction
:
简单地删除(实际上是重命名)公钥文件 id_rsa.pub
对我来说解决了这个问题,尽管 git 一直在抱怨 无效格式。
不太确定,但实际上并不需要该文件,因为无论如何都可以从私钥文件 id_rsa
中提取公钥。
答案 11 :(得分:0)
我尝试时遇到了类似的错误 Load key "/root/.ssh/id_rsa": invalid format
RUN echo "$ssh_prv_key" > /root/.ssh/id_rsa && chmod 600 /root/.ssh/id_rsa
这导致了 identity file /root/.ssh/id_rsa type -1 invalid format
和 read_passphrase: can't open /dev/tty
之类的错误。
正确的方法是使用
COPY id_rsa /root/.ssh/id_rsa
RUN chmod 600 /root/.ssh/id_rsa
解决方案说明:我的私钥格式错误 - 不是多行,而是作为一行传递,并且您可能有任何其他格式问题,例如开头或结尾处忘记的“-”,或其他内容行尾有误,例如缺少换行符格式或行尾有额外的字母。
有关详细信息,请参阅 Dockerfile: clone repo with passwordless private key. Errors: “authentication agent” or “read_passphrase: can't open /dev/tty”,其主要思想来自 Add private key to ssh-agent in docker file,其思想再次来自 Gitlab CI/Docker: ssh-add keeps asking for passphrase。
答案 12 :(得分:0)
在 Git-hub 中添加 SSH-KEY:Windows
在 cmd 中输入:ssh-keygen -t ed25519 -C "your-email-id"
转到C:\Users\your-name\.ssh
在那里你会得到一个文件:id_ed25519.pub
打开那个文件,复制那个,去github->setting->keys->ssh-key->new SSH Key
粘贴您复制的密钥
完成!!