GitHub 上的“密钥无效”消息

Posted

技术标签:

【中文标题】GitHub 上的“密钥无效”消息【英文标题】:"Key is invalid" message on GitHub 【发布时间】:2012-05-15 14:57:24 【问题描述】:

我已根据here 概述的过程为新服务器安装生成了 SSH 密钥。但是,当我将 id_rsa.pub 的内容复制到 GitHub 上的密钥列表时,我收到错误消息“密钥无效。确保您已正确复制文件。”

生成的密钥有效的,我完全照原样复制它(全部在一行中,开头/结尾没有空格)。

有人知道会发生什么吗?

【问题讨论】:

为了确定,您确实包含了密钥本身之前的ssh-rsa,是吗? 至少在 CentOS 7.x 中,如果您只使用 ssh-keygen 生成 SSH 密钥,那么该格式将不起作用。我收到了这条消息Key is not in OpenSSH format。我使用 ssh-keygen -t rsa -b 4096 修复了它,然后将此密钥复制到 Github cat ~/.ssh/id_rsa.pub 【参考方案1】:

如果您确实复制了 id_rsa.pub 键的内容(连续一行),则结果应如下所示(来自 GitHub ssh help page):

OP louismconfirms 复制粘贴问题:

出于一个非常模糊的原因,从 emacs 复制粘贴删除了 ssh-rsa 之后的 \n,这就是导致问题的原因。 从 vi 复制粘贴解决了这个问题

【讨论】:

【参考方案2】:

我来这里是因为我遇到了同样的问题。从您的问题中,我意识到我正在从错误的文件中复制内容,没有 .pub 扩展名(这是我的私钥,即 id_rsa 文件,应该在任何时候!)

来自 MAC:

vi ~/.ssh/id_rsa.pub

从字符块的末尾(您的电子邮件域扩展名的最后一个字母)精确复制到开头,以 ssh-rs ...

如果它不起作用,您肯定没有正确复制。

成功了。

如果您使用的是 Windows,请使用记事本并如上所述复制粘贴。

希望对你有所帮助。

【讨论】:

由于一个非常模糊的原因,从 emacs 复制粘贴删除了 ssh-rsa 之后的 \n,这就是导致问题的原因。从 vi 复制粘贴解决了这个问题。既然你给了我尝试的想法,我就把答案奖励给你! vi 对我不起作用。我不得不使用 cat 命令 (OSX) 将其打印到终端并复制其输出。感谢您让我走上正确的道路。 复制 vim 对我有用,但复制 cat 文件名的结果没有 无论出于何种原因,我的 vim 都未能包装密钥。从 sublime 中复制出来以获得整个密钥。工作。 vi 成功了,我使用了 nano,文件被$ 符号截断【参考方案3】:

在复制/粘贴您的公钥时,有些步骤根本不清楚。 (作为记录,我使用 Putty Key Generator 作为我的密钥。)

在第一行,输入 ssh-rsa。 确保在 ssh-rsa 后添加一个空格 当您将密钥复制/粘贴到密钥文本框中时,它应该保留 \n 字符 (x0A)。如果您在 Windows 上使用记事本,则在将文本复制到 Github 之前,您不会看到这些新行。

注意这个截图,ssh-rsa 后面有一个空格(看光标。)公钥文本也包含三个\n字符,所以你可以看到公钥文本在文本框。

【讨论】:

我的 id_rsa.pub 文件缺少“ssh-rsa”部分。在 Github 上手动添加就可以了。 在相关说明中,在 GitLab(测试 7.4.3)中,SSH 密钥只能在(如上所述)添加 ssh-rsa 并且通过 not 包括换行符。 这一定是 putty 特定的问题;我对腻子有同样的错误 @JamesLawruk BTW,GitHub(我相信任何使用 ssh 的程序)都会忽略密钥文件中的所有换行符。 (这就是您允许将其分成 3 行的原因 --- 在相当任意的点上。) 在“ssh-rsa”之后添加一个空格对我有帮助。非常感谢。【参考方案4】:

我尝试了几种方法,但都没有帮助(我的操作系统是 ubuntu)。然后我想我是否可以使用命令“more”来打印 ~/.ssh/id_rsa.pub 的内容。

对不起,我没有发布图片的声誉!有的话我会发的!

这是一个可以看到图片的网址:

我从命令行复制了内容,它成功了!!!

【讨论】:

张贴图片地址,有些用户可能会为您添加到正文中。 在某些网站上传图片并分享链接。解决问题 @DontVoteMeDown 我已经分享了网址。只需复制内容即可! @Hamad 我已经分享了网址。 谢谢,这确实奏效了……每个人都有自己的理论。当涉及到 SSH 密钥之类的东西时,事情不应该这么“神奇”。添加 SSH 密钥的火车残骸在 github 上。【参考方案5】:

对于那些展望未来的人来说,另一个常见问题是自动换行。例如,如果您运行cat ~/.ssh/id_rsa.pub,它可以换行,从而在每个换行符处添加额外的\ 字符。删除这些,您的密钥应该可以正常工作。

【讨论】:

【参考方案6】:

如果你使用 Sublime,你可以正确看到 ssh-key。 检查是否有任何 id_rsa.pub

ls -al ~/.ssh

如果它在适当的位置,用崇高的文字打开它

sudo subl /home/user_name/.ssh/id_rsa.pub

然后复制并粘贴您的公共 ssh 密钥。

【讨论】:

【参考方案7】:

Recommended 来自 GitHub

复制SSH-KEY

我使用xclip 复制id_rsa.pub 密钥,如下所示:

1。安装xclip

sudo apt-get install xclip

2。用xclip复制

xclip -sel clip < ~/.ssh/id_rsa.pub


祝你好运。

【讨论】:

【参考方案8】:

在我的情况下,我必须在我的电子邮件之后(在整个密钥字符串之后)添加一个额外的白色规则,然后才能被接受。在尝试复制在 Gitlab 上输入的 ssh 密钥后,我偶然发现了这一点。

从我的 pub 密钥直接从命令行直接复制的 pbcopy 不起作用。来自 gitlab 的副本,最后带有额外的白色规则,成功了。

【讨论】:

【参考方案9】:

在窗口中,

只需从密钥文件中复制裸密钥数据并删除新行。 在对话框中写下以下内容以解决您的问题。 ssh-rsa 密钥

注意:ssh-rsa 和密钥之间有空格

你就完成了。

【讨论】:

【参考方案10】:

我刚遇到这个问题。超级沮丧。我想我的情况可能会影响问题的原因。我正在使用平板电脑,尝试通过平板电脑浏览器 (Chrome) 在 githubs 站点上设置密钥,并且我正在从连接到远程 linux 服务器的 ssh 应用程序复制密钥。

最终发生的事情是,不知何故,当我将密钥复制到浏览器时,它引入了许多换行符。不仅如此,它还会从插入新行的每个点删除一个字符。

所以为了让它工作,我必须手动找到每个新的换行符,然后寻找那个部分的键来找到丢失的字符。然后我添加了字符并删除了新行。在我追查每一个变化之后,密钥工作正常。

顺便说一句,我自己并没有添加任何新的换行符,例如ssh-rsa后面的其他人提到的换行符。

希望这对其他人有所帮助。我不知道为什么会这样。愚蠢的是,复制到剪贴板会改变复制的文本。哦,我也是直接从 Vim 中复制出来的。

【讨论】:

【参考方案11】:

尽管从终端 (Cmder/ConEmu) 直接从 cat 输出复制公钥,但我遇到了同样的问题。您用来复制公钥的方法似乎有所不同。这是一种检查方法:

$ ssh-keygen -l -f ~/.ssh/id_rsa.pub
4096 SHA256:...

然后将失败的密钥粘贴到新文件中,并尝试验证:

$ ssh-keygen -l -f test.pub
test.pub is not a public key file.

就我而言,我一直使用cat 从终端输出复制密钥;而是从vim 获取密钥有效。这是在启用自动换行的情况下在 vim 中打开密钥的方法:

$ vim "+set wrap" ~/.ssh/id_rsa.pub

我怀疑终端模拟器可能与它有关,因为我在 Terminal.app 中没有遇到此问题。

【讨论】:

它对我有用:Putty SSH 从 Windows 到 Linux,用 vi 打开密钥文件,然后通过在屏幕上选择并粘贴来从 putty 复制。怪猫没用。 使用了 puttygen,它给了我完整的行,而不是我躺在周围的一些 pub 文件。【参考方案12】:

如果您使用 bash for windows 作为终端,并且通过 shift + highlighting + ctrl-c 进行复制,那么此解决方案可能适合您:

    复制密钥并将其粘贴到记事本后:

    现在转到编辑 > 全选或 Ctrl-A

    大量蓝色区域是空白。您需要使用退格键或删除键删除它们。留下绿色圆圈中的空白。

    您现在应该可以将此编辑后的版本复制并粘贴到 github 中。

【讨论】:

【参考方案13】:

我知道这是一个 cpl 岁的问题,但如果有人在 2018 年遇到这个问题:

那么下面就不用想了:

我的问题是我试图复制 私钥

id_rsa

而不是公钥内容

id_rsa.pub

作为我的 SSH gitlab 存储库密钥,所以在你之后:

ssh-keygen -t rsa -C "your@email.com" -b 4096

请记住要从中复制的 .pub 文件扩展名:

OSX

  pbcopy pub

Linux

  xclip -sel 剪辑 pub

Windows PowerShell

  cat ~/.ssh/id_rsa.pub |剪辑

然后将其粘贴到您的 gitlab/github 或其他存储库作为您的 SSH 密钥

这很有意义,因为您应该始终只共享您的公钥,而不是私钥:)

【讨论】:

ssh-keygen -t rsa -b 4096 有帮助,显然你可以省略 -C your@email.com 我爱你。我已经尝试了好几个小时了,而这个答案是唯一对我有帮助的:)【参考方案14】:

这是我们在生成密钥时面临的常见问题。在生成 SSH 时,我们会得到两个 diff 文件,一个是 id_rsa 和 id_rsa.pub。这里带有 pub 扩展名的文件是公钥持有者文件。您必须从该文件中复制内容并添加到 Github。

注意事项: 1.公钥文件内容以'SSH-RSA'开头 2. 以您的 Github 电子邮件 ID 结尾。例如:如果您使用 @gmail.com 注册了 Github,那么 pub 文件的最后一个指定的电子邮件 ID

【讨论】:

【参考方案15】:

如果使用 vs 代码

code ~/.ssh/id_rsa.pub 将打开.pub文件复制到github

【讨论】:

【参考方案16】:

有人建议使用$ vi ~/.ssh/id_rsa.pub,但它对我不起作用。

因此,我在 Windows 机器上使用$ cat ~/.ssh/id_rsa.pub 命令在终端上打印出来,然后复制它。

【讨论】:

【参考方案17】:

将 id_rsa.pub 的全部内容复制到剪贴板:

运行 > pbcopy ~/.ssh/id_rsa.pub

【讨论】:

【参考方案18】:

我试图上传我的公钥并收到“无效密钥”消息。我的格式不正确,因为密钥末尾有多余的空格。格式应为:ssh-rsa <public-key>

【讨论】:

【参考方案19】:

只需尝试安装 wps2019 并打开 wps2019 上的 .pub 并复制代码并粘贴即可:

【讨论】:

【参考方案20】:

如果您使用的是 linux 或 mac,只需执行以下操作:

$ cat ~/.ssh/id_rsa.pub

输出的格式如下:

ssh-rsa somerandomcharacters user@domain

最后一步是复制内容并将其粘贴到目标位置

【讨论】:

【参考方案21】:

将 ssh 公钥复制到剪贴板主要是这里的技巧,最好的方法是直接从终端。 您必须通过以下命令将该密钥输出到终端 cat ~/.ssh/id_rsa.public 并按回车键。 ssh public 将显示在 GitBash 终端屏幕上,然后您只需从电子邮件的最后一个字符选择到密钥的开头即 ssh rsa... 仔细复制它 我花了几天时间最终得出了这个解决方案。

【讨论】:

【参考方案22】:

我的笔记本电脑在 macOS Big Sur 版本 11.3.1 上,ssh-keygen -t rsa 在开头生成了一个非常长的密钥 ssh-rsa-cert-v01@openssh.com。 ssh-keygen -t rsa -b 4096 工作;它使用 ssh-rsa 算法创建了一个密钥。

【讨论】:

【参考方案23】:

如果你使用腻子(puttygen),复制这个!!!!

【讨论】:

【参考方案24】:

我使用的是窗口操作系统,但由于某些原因它对我不起作用:

$ clip < ~/.ssh/id_ed25519.pub
bash: clip: command not found

我在地址找到了隐藏的.ssh 文件夹:C:\Users\g1100_000\.ssh 您将看到 pub 文件如下:

使用您的代码编辑器打开它,然后将密钥复制到 github。 希望对您有所帮助。

【讨论】:

【参考方案25】:

$ cat /c/Users/User/.ssh/id_rsa.pub 使用此命令代替 $ cat /c/Users/User/.ssh/id_rsa

【讨论】:

【参考方案26】:

按照下面的说明从头开始,您将能够解决此问题。

许多 Git 服务器使用 SSH 公钥进行身份验证。为了提供公钥,系统中的每个用户都必须生成一个,如果他们还没有公钥的话。这个过程在所有操作系统中都是相似的。首先,您应该检查以确保您还没有密钥。默认情况下,用户的 SSH 密钥存储在该用户的 ~/.ssh 目录中。您可以通过转到该目录并列出内容来轻松检查您是否已经拥有密钥:

$ cd ~/.ssh
$ ls
authorized_keys2  id_dsa       known_hosts
config            id_dsa.pub

您正在寻找一对名为 id_dsaid_rsa 的文件,以及一个扩展名为 .pub 的匹配文件。 .pub 文件是你的公钥,另一个文件是对应的私钥。如果你没有这些文件(或者你甚至没有.ssh 目录),你可以通过运行一个名为ssh-keygen 的程序来创建它们,该程序在 Linux/macOS 系统上随 SSH 包一起提供并附带使用适用于 Windows 的 Git:

$ ssh-keygen -o
Generating public/private rsa key pair.
Enter file in which to save the key (/home/schacon/.ssh/id_rsa):
Created directory '/home/schacon/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/schacon/.ssh/id_rsa.
Your public key has been saved in /home/schacon/.ssh/id_rsa.pub.
The key fingerprint is:
d0:82:24:8e:d7:f1:bb:9b:33:53:96:93:49:da:9b:e3 schacon@mylaptop.local

首先它会确认您要保存密钥的位置 (.ssh/id_rsa),然后会询问两次密码,如果您不想在使用密钥时输入密码,可以将其留空。但是,如果您确实使用密码,请确保添加 -o 选项;它以一种比默认格式更能抵抗暴力破解密码的格式保存私钥。您还可以使用ssh-agent 工具来避免每次都输入密码。

现在,执行此操作的每个用户都必须将其公钥发送给您或管理 Git 服务器的任何人(假设您使用需要公钥的 SSH 服务器设置)。他们所要做的就是复制.pub 文件的内容并通过电子邮件发送。公钥看起来像这样:

$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSU
GPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3
Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XA
t3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/En
mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx
NrRFi9wrf+M7Q== schacon@mylaptop.local

【讨论】:

Walisson Rodrigues,欢迎提供解决方案的链接,但请确保您的答案在没有它的情况下有用:add context around the link 这样您的其他用户就会知道它是什么以及它为什么存在,然后如果目标页面不可用,请引用您链接到的页面中最相关的部分。 Answers that are little more than a link may be deleted.

以上是关于GitHub 上的“密钥无效”消息的主要内容,如果未能解决你的问题,请参考以下文章

如何将 mrjob EMR 指向正确的 AWS 账户?我不断收到 ssh 密钥无效消息

如何取消 github/pypi 项目上的功能

当你有密钥时让 Git 项目开源

从GitHub上的Pull Request中删除文件

对 FCM 执行 POST 请求时服务器密钥无效?

如何更改 Github 的默认提交消息?