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 PowerShellcat ~/.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_dsa
或 id_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 上的“密钥无效”消息的主要内容,如果未能解决你的问题,请参考以下文章