我在Mac Snow Leopard上,我刚刚安装了git
。
我刚试过
git clone git@thechaw.com:cakebook.git
但这给了我这个错误:
Initialized empty Git repository in `/Users/username/Documents/cakebook/.git/`
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
我缺少什么?
我也试过ssh-keygen
没有passphase但仍然是同样的错误。
答案 0 :(得分:637)
用户之前没有生成过ssh公钥/私钥对?
此信息正在解决问题,但可以应用于支持SSH pubkey身份验证的所有其他git存储库。 (例如,参见gitolite,gitlab或github。)
首先设置您自己的公钥/私钥对。这个 可以使用DSA或RSA,所以基本上你设置的任何键都可以使用。 在大多数系统上,您可以使用ssh-keygen。
- 首先,您要进入.ssh目录。打开终端并运行:
cd ~/.ssh && ssh-keygen
- 接下来,您需要将其复制到剪贴板。
- 在OS X上运行:
cat id_rsa.pub | pbcopy
- 在Linux上运行:
cat id_rsa.pub | xclip
- 在Windows上(通过Cygwin / Git Bash)运行:
cat id_rsa.pub | clip
- 通过网站将您的密钥添加到您的帐户。
- 最后设置你的.gitconfig。
git config --global user.name "bob"
git config --global user.email bob@...
(不要忘记重新启动命令行以确保重新加载配置)多数民众赞成你应该很好地克隆和结帐。
更多信息可在https://help.github.com/articles/generating-ssh-keys找到(感谢@Lee Whitney) -
用户在之前设置了ssh公钥/私钥对?
eval $(ssh-agent -s)
告诉钥匙的位置
ssh-add ~/.ssh/id_rsa
答案 1 :(得分:182)
可以通过以下方式进行更广泛的故障排除甚至自动修复:
ssh -vT git@github.com
来源:https://help.github.com/articles/error-permission-denied-publickey/
答案 2 :(得分:145)
当您访问SSH URL(读/写)而不是Git只读URL时,可能会发生此错误,但您对该回购没有写入权限。
有时你只想克隆你自己的回购,例如部署到服务器。在这种情况下,您实际上只需要READ-ONLY访问权限。但由于那是您自己的回购,GitHub可能会显示SSH URL,如果这是您的偏好。在这种情况下,如果远程主机的公钥不在您的GitHub SSH密钥中,您的访问权将被拒绝,预计会发生。
同样的情况是当您尝试使用SSH URL克隆其他人没有写入权限的repo时。
总之,如果您的意图是仅克隆回购,请使用HTTPS网址(https://github.com/{user_name}/{project_name}.git
)而不是SSH网址(git@github.com:{user_name}/{project_name}.git
),这样可以避免(公共密钥验证。
更新:GitHub现在正在显示HTTPS作为默认协议,此举可能会减少可能滥用SSH URL的行为。
答案 3 :(得分:91)
github帮助link帮我解决了这个问题。看起来ssh密钥没有添加到ssh-agent。这就是我最终做的事情。
命令1:
确保已启用ssh-agent。该命令在后台启动ssh-agent:
eval "$(ssh-agent -s)"
命令2:
将SSH密钥添加到ssh-agent:
ssh-add ~/.ssh/id_rsa
答案 4 :(得分:18)
得到相同的错误报告。
修复了使用HTTP的问题。因为我不想设置" SSH密钥"用于测试PC。
克隆时将URL更改为HTTP:
git clone https://github.com/USERNAME/REPOSITORY.git
我的问题有点不同:将现有的本地存储空间添加到遥控器时,我设置了网址:
git remote add origin ssh://github.com/USERNAME/REPOSITORY.git
要解决此问题,请将网址重置为HTTP:
git remote set-url origin https://github.com/USERNAME/REPOSITORY.git
顺便说一句,您可以使用以下命令检查您的网址:
git remote -v
origin https://github.com/USERNAME/REPOSITORY.git (fetch)
origin https://github.com/USERNAME/REPOSITORY.git (push)
希望这会对像我这样的人有所帮助。 :d
答案 5 :(得分:18)
这对我有用:
ssh-add ~/.ssh/id_rsa
答案 6 :(得分:18)
请注意(至少对于某些项目而言)您必须拥有带有ssh密钥的github帐户。
查看身份验证代理中列出的密钥( ssh-add -l </ em>)
(如果您没有看到任何内容,请使用ssh-add / path /添加一个现有密钥到/ your / key(例如: ssh-add~ / .ssh / id_rsa )) />
(如果您没有任何密钥,请先创建一个。请参阅:http://rcsg-gsir.imsb-dsgi.nrc-cnrc.gc.ca/documents/internet/node31.html或只是google ssh-keygen)
要验证您是否拥有与您的github帐户关联的密钥:
转到:https://github.com/settings/ssh
您应该看到至少一个密钥,其哈希键与您在一分钟前键入 ssh-add -l </ em>时看到的哈希值之一相匹配。
如果不这样做,请添加一个,然后重试。
答案 7 :(得分:13)
我的情况略有不同,我登录到远程服务器并在服务器上使用git,当我运行任何git命令时,我收到相同的消息
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
我修复它的方法是更改Mac上的/ etc / ssh_config文件。 从
ForwardAgent no
到
ForwardAgent yes
答案 8 :(得分:12)
我遇到了同样的问题,因为我认为 SSH 和 HTTPS 之间存在区别
https://github.com/USERNAME/REPOSITORY.git
ssh://github.com/USERNAME/REPOSITORY.git
所以我将 HTTPS 更改为 SSH ,只需将https://
更改为ssh://
,网址末尾的任何内容都没有更改。
但事实是:
https://github.com/USERNAME/REPOSITORY.git
git@github.com:USERNAME/REPOSITORY.git
这意味着我将ssh://github.com/USERNAME/REPOSITORY.git
更改为git@github.com:USERNAME/REPOSITORY.git
。
愚蠢的错误,但希望有人帮助!
答案 9 :(得分:10)
我正在努力解决同样的问题,这就是我所做的,我能够克隆回购。我按照 iMac 的这些程序。
第一步:检查我们是否已有公共SSH密钥。
ls -al ~/.ssh
以查看是否存在现有的SSH密钥:检查目录列表以查看您是否已拥有公共SSH密钥。默认公共是以下d_dsa.pub之一,id_ecdsa.pub,id_ed25519.pub,id_rsa.pub
如果您没有找到,请转到步骤2,否则请按照步骤3
进行操作第2步:生成公共SSH密钥
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
Generating public/private rsa key pair
中看到以下内容。当它提示"Enter a file in which to save the key,"
时按Enter键。这接受默认文件位置。当它提示Enter a file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter]
时,只需按回车即可。
在提示符下,键入安全密码。Enter passphrase (empty for no passphrase): [Type a passphrase]
如果您不想Enter same passphrase again: [Type passphrase again]
再次按回车这将生成id_rsa.pub
步骤3:将SSH密钥添加到ssh-agent
eval "$(ssh-agent -s)"
$ ssh-add -K ~/.ssh/id_rsa
现在复制SSH密钥并将其添加到您的github帐户
pbcopy <
~/.ssh/id_rsa.pub
的命令,这会将文件复制到剪贴板
现在打开你的github帐户转到设置&gt; SSH和GPG密钥&gt;新SSH密钥输入标题并从剪贴板粘贴密钥并保存。瞧,你已经完成了。 答案 10 :(得分:8)
Windows上的另一种可能性,这些答案均未涵盖,有关故障排除的git或github文档中也未涉及:
git可能使用的openssh可执行文件与您认为的不同。
尝试从github和ssh.dev.azure.com克隆或提取消息时,我收到Permission denied (public key)
错误,并且我按照所有说明进行了操作,并验证了我的SSH密钥是否正确设置(从SSH的立场)使用ssh -vT git@github.com
和ssh -vT git@ssh.dev.azure.com
。仍然出现这些错误:
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
我最终发现问题是Windows的Git和Windows都有自己的openssh版本。在此处记录:https://github.com/desktop/desktop/issues/5641
我依靠Windows ssh-agent服务来存储我的ssh密钥密码,因此git(带有openssh的单独版本)无法读取我的私钥。我认为使用此错误消息是一个错误-具有误导性。
解决方法是:
git config --global core.sshCommand "'C:\Windows\System32\OpenSSH\ssh.exe'"
或者在您的〜/ .gitconfig中:
[core]
sshCommand = 'C:\\Windows\\System32\\OpenSSH\\ssh.exe'
也许这将很快在Windows的git中修复,但这是我第二次在此问题上浪费时间。
答案 11 :(得分:6)
在Windows上,确保所有应用都同意HOME。 Msys令人惊讶地不会为你做。我不得不设置一个环境变量,因为ssh和git似乎不同意我的.ssh目录所在。
答案 12 :(得分:6)
这些是我在Windows 10中遵循的步骤
打开Git Bash。
生成公钥:
ssh-keygen -t rsa -b 4096 -C "youremailaddress@xyz.com"
将生成的密钥复制到剪贴板(类似于CTRL + C)
clip < ~/.ssh/id_rsa.pub
浏览器,转到Github =>配置文件=>设置=> SSH和GPG密钥=>添加密钥
提供键名并粘贴剪贴板(CTRL + V)。
最后,测试您的连接(Git bash)
ssh -T git@github.com
谢谢!
答案 13 :(得分:5)
你在corporate environment吗?您的系统变量最近是否有可能发生变化?根据{{3}} SO回答,ssh密钥位于%HOMEDRIVE%%HOMEPATH%\.ssh\id_rsa.pub
。因此,如果%HOMEDRIVE%
最近发生了变化,git就不知道在哪里查找密钥,从而知道所有的身份验证内容。
尝试运行ssh -vT git@github.com
。记下identity file
所在的位置。对我来说,这是指向不到我的正常\Users\MyLogin
而是指向网络驱动器,因为在网络级别推送了环境变量的更改。
解决方案?由于我的新%HOMEDRIVE%
具有与我的本地文件相同的权限,因此我只将我的.ssh文件夹移到那里,并将其称为一天。
答案 14 :(得分:5)
基本的GIT指令没有引用SSH密钥。根据上面的一些链接,我找到了一个git帮助页面,逐步解释了如何为各种操作系统执行此操作(链接将检测您的操作系统并相应地重定向):
http://help.github.com/set-up-git-redirect/
它遍历了GITHub所需的所有内容,并提供了详细的解释,例如“为什么在创建RSA密钥时添加密码短语”。我想我会发布它,以防它帮助其他人......
答案 15 :(得分:5)
1.1。。打开 git batch (下载her)
1.2。 粘贴以下文本(更改为GitHub帐户电子邮件)
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
1.4。单击两次 Enter (或设置SSH密钥密码-Gitbub passphrases docs)
> Enter passphrase (empty for no passphrase): [Type a passphrase]
> Enter same passphrase again: [Type passphrase again]
1.5。密钥生成:
您的标识已保存在/c/Users/user/.ssh/id_rsa ...
1.6。 将SSH密钥复制到剪贴板。
$ clip < ~/.ssh/id_rsa.pub
完成:)
如果某人不想使用SSH use HTTPS
:
Github文档: https://docs.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh
答案 16 :(得分:5)
这就是它对我有用的方式:
1-打开终端并转到用户[参见附件]
2-打开.ssh文件夹并确保它没有像id_rsa或id_rsa.pub这样的文件,否则有时它不会正确地重写文件
3 - git --version [检查git安装和版本]
4- git config --global user.email“your email id”
5- git config --global user.name“your name”
6-git config --list [确保你已经设置了你的名字&amp;电子邮件]
7-cd~ / .ssh
8-ssh-keygen,它提示保存文件,允许它
9- cat~ / .ssh / id_rsa.pub [访问您的公钥&amp;将密钥复制到gerrit设置]
注意:你不应该在Git上使用sudo命令。如果你有一个很好的理由你必须使用sudo,那么确保你在每个命令中使用它(在这一点上使用su来获取shell作为root可能更好)。如果你生成没有sudo的SSH密钥,然后尝试使用像sudo git push这样的命令,你将不会使用你生成的相同密钥
答案 17 :(得分:4)
最简单的方法之一
转到终端 -
git push <Git Remote path> --all
答案 18 :(得分:3)
如果您有多个密钥,则可能需要执行此操作
ssh-add private-keyfile
答案 19 :(得分:3)
除了Rufinus&#39;回复,将您的ssh密钥复制到 Windows 中的剪贴板的快捷方式是:
type id_rsa.pub | clip
参考文献:
答案 20 :(得分:2)
在MAC中,转到终端
1)使用命令-cd ~
2)cd .ssh && ssh-keygen(对于默认值,单击两个输入的Enter / Return键)
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/username/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/usernmae/.ssh/id_rsa.
3)之后,执行“ ls
”。您会找到id_rsa.pub文件。
4)复制id_rsa.pub文件中的内容(使用cat命令-cat id_rsa.pub
读取)
5)导航到BitBucket或任何支持SSH密钥的版本工具。使用添加密钥选项
粘贴内容就是这样。尝试立即提交并推送。
答案 21 :(得分:2)
非常直截了当。输入以下命令
ssh-keygen -t rsa -b 4096 -C "youremailid@yourdomain.com"
生成SSH密钥。打开文件并复制内容。转到GitHub设置页面,然后单击SSH密钥。单击“添加新SSH密钥”,然后将内容粘贴到此处。就是这样:)你不应该再看到这个问题了。
答案 22 :(得分:2)
我必须将ssh密钥复制到根文件夹。 运行Ubuntu 18.04的Google Cloud Compute Engine
sudo cp ~/.ssh/* /root/.ssh/
答案 23 :(得分:2)
我在设置当前项目时遇到过这个问题,上述解决方案都没有。所以我尝试使用命令ssh -vT git@github.com查看调试列表中发生的事情。我注意到我的私钥文件名不在列表中。所以将私钥文件名重命名为'id_rsa'来完成这项工作。希望这可以提供帮助。
答案 24 :(得分:1)
在我的情况下,我重新安装了ubuntu,用户名从以前更改过。在这种情况下,生成的ssh密钥也与前一个密钥不同。
只需在存储库中复制当前的ssh公钥即可解决问题。该密钥将在您的用户/home/.ssh/id_rsa.pub
答案 25 :(得分:1)
我遇到此错误是因为我需要给我当前的工作目录权限700:
chmod -R 700 /home/ec2-user/
答案 26 :(得分:1)
对我来说问题是使用 sudo
:
sudo git clone git@github.com:userName/repo.git
导致上述错误。
所以为了解决这个问题,我删除了我试图克隆到的文件夹
sudo chown -R $USER:$USER /var/www/iqge.org/html
然后使用这个
git clone git@github.com:userName/repo.git
已成功完成
答案 27 :(得分:1)
在我的MAC中我解决了这个问题:
cp ~/.ssh/github_rsa ~/.ssh/id_rsa
出于某种原因,我的git停止在github_rsa
文件中找到私钥。这发生在一个特定的回购中。我的意思是在其他存储库中git保持正常工作。
我认为这是一个错误。
我可以发现此行为正在运行ssh -vT git@github.com
答案 28 :(得分:1)
这个奇怪的错误,在我的情况下是gnome-keyring-daemon
错误地命名需要密码的密钥的症状。
我按照此处列出的步骤操作,并通过终端输入密码。错误,即混乱的GUI界面,已得到解决。 请参阅:https://askubuntu.com/questions/3045/how-to-disable-gnome-keyring
答案 29 :(得分:1)
我得到了同样的错误。我的问题是在sudo混合。
我无法创建自动克隆的目录,而无需使用sudo为git clone命令添加前缀。但是,当我这样做时,我的ssh键没有被正确引用。
要修复它,我通过chmod在我想要包含我的克隆的父目录上设置权限,以便我可以写入它。然后我运行git clone没有sudo前缀。然后它工作了!之后我更改了权限。完成。
答案 30 :(得分:1)
我收到此错误是因为我使用错误的电子邮件生成了ssh密钥。我能够使用ssh连接,但不能使用git。解决方案是使用我的github帐户的主电子邮件地址重新生成密钥。
答案 31 :(得分:1)
它对我有用。
您的公钥会保存到id_rsa.pub;文件中,并且是您上传到帐户的密钥。您可以运行以下命令将此密钥保存到剪贴板:
pbcopy&lt;把〜/ .ssh / id_rsa.pub
答案 32 :(得分:1)
它对我有用
ssh -i [your id_rsa path] -T github@github.com
答案 33 :(得分:1)
当您尝试使用不同的用户名推送到存储库时,最简单的解决方案是:
git remote set-url origin https://USERNAME@github.com/USERNAME/PROJECTNAME.git
答案 34 :(得分:1)
尝试运行makefile时,我收到了类似的 Permission denied(publickey)错误。
作为上述SSH步骤的替代方法,您可以安装本机GitHub for Mac应用程序。
从 - https://help.github.com/articles/set-up-git#platform-mac
点击从Mac下载GitHub使用git hub帐户完成设置后(我还安装了git hub命令行工具,但不确定是否需要此步骤),然后我收到了一封电子邮件 -
[GitHub]您的帐户中添加了新的公钥
我的错误已修复。
答案 35 :(得分:0)
如果您在 Windows 上使用 SourceTree,您需要使用 PuTTyGen
创建一个新的密钥对您应该插入顶部部分的 ssh-rsa
键
Github => Profile=> Settings => SSH and GPG keys => Add Key
然后保存私钥并将其添加到 Pageant
(它与 SourceTree 一起运行)
就这些
答案 36 :(得分:0)
创建一个新文件夹在您 PC 中的任何位置(例如台式机)
移动到那个新文件夹并在那里打开 git bash。
& 在 bash 中编写以下代码:
<块引用>$ git init
$ git remote add origin https://github.com/YOUR_GITHUB_HANDLER/YOUR_REPO_NAME.git
$ git pull origin master
(无论是否拉取文件,请查看新文件夹)
如果文件被拉取,则首先删除该旧文件夹中的所有文件/文件夹(发生所描述的错误)包括 .git 文件夹
& 复制新文件夹中的所有文件,包括 .git 并将其粘贴到发生所描述错误的旧文件夹中。
这将获取您的远程仓库。
如果您想获取远程仓库而不删除您在本地所做的新更改,那么只需复制并粘贴我们新的 .git 文件夹
现在你可以做$ git push origin master
答案 37 :(得分:0)
每当我在工作中使用新计算机或换工作时,这些都是我遵循设置 github 访问的步骤。 Mac 或 Windows
-转到 https://github.[yourWorkDomain].com。导航到设置 → 开发人员设置 → 个人访问令牌
- 生成一个新的令牌
- 设置令牌描述并只检查范围的“repo”框(这将为您提供 repo:status、repo_deployment、public_repo、repo:invite access)
-获得令牌后,复制它(先不要离开,确认接下来的两个步骤有效)
- 再次尝试克隆 repo(使用“https”)
- 对于用户名,请使用您的用户名
-对于密码,粘贴您复制的令牌
- 所有未来的请求现在都应该可以工作,而无需询问您的用户名和密码。
答案 38 :(得分:0)
可能公共/私有配置不正确。请按照以下步骤操作。 在窗口中的任何地方执行命令
ssh-keygen -o -f ~/.ssh/id_rsa
现在转到c://users/xyz/.ssh/并打开id_rsa密钥(路径可能会有所不同) 现在转到gitlab和userprofile> setting> ssh密钥,然后在此处添加密钥。 现在尝试克隆
答案 39 :(得分:0)
我也有完全相同的错误。
问题在于,当将公钥复制到BitBucket中时(在我的情况下),最后复制/粘贴了不可见的换行符。
因此,在复制公钥时,首先将其复制到记事本中,删除末尾的空行,然后复制并粘贴。
答案 40 :(得分:0)
首先,我建议检查一些标准的东西,例如:
service ssh restart
对我来说足够了。
答案 41 :(得分:0)
以管理员身份执行终端。
如果终端看不到您的.ssh,它将返回该错误。
答案 42 :(得分:0)
使用来自Github的ssh链接,但请确保不要使用ssh附加它,只需使用git hub上的ssh选项卡来克隆你的repo。
答案 43 :(得分:0)
我可以通过在我的ubuntu系统中执行以下步骤来解决此问题。因为我正在尝试使用无密码ssh到系统。
sudo vi / etc / ssh / sshd_config
1)评论如下: #Change to no禁用隧道明文密码 #PasswordAuthentication是的 PasswordAuthentication no ----&gt;评论这个。
2)然后重新启动sshd守护程序,如下所示。
service sshd restart
答案 44 :(得分:0)
让我分享一下我的经历,
我试图从Gerrit仓库中克隆一些项目,我在帐户设置中获取了公钥。
首次尝试git clone
时出现以下错误:
Unable to negotiate with XX.XX.XX.XX port XXX: no matching key exchange
method found. Their offer: diffie-hellman-group1-sha1
我发现我需要以某种方式将SSH选项-oKexAlgorithms=+diffie-hellman-group1-sha1
传递给git clone
。
希望GIT_SSH_COMMAND
环境变量完成这项工作:
export GIT_SSH_COMMAND="ssh -oKexAlgorithms=+diffie-hellman-group1-sha1"
但是git clone
仍然没有开始工作..现在它抛出了(关于主题):
Permission denied (publickey).
我已经获得了SSH密钥,并且不想重新生成它们。我检查了与主机的简单SSH连接,没关系:
**** Welcome to Gerrit Code Review ****
Hi XXXXX, you have successfully connected over SSH.
Unfortunately, interactive shells are disabled.
To clone a hosted Git repository, use:
git clone ssh://xxxxx@xx.xx.xx:xxx/REPOSITORY_NAME.git
我有点困惑。我再次启动并通过-vvv
选项打开SSH调试。我看到了以下内容:
debug1: read_passphrase: can't open /dev/tty: No such device or address
可能是GIT_SSH_COMMAND
env变量的开销 - 我的密钥是用密码保护的(当我检查登录git repo主机时我输入了它。)
所以,我决定放弃那个短语。一个简单的命令帮助了我:
ssh-keygen -p
然后我输入了密码短语&#34;旧密码&#34;然后在&#34;新的passphare&#34;上点击 ENTER 两次把它留空,即根本没有密码,并确认我的选择。
之后我在我的本地磁盘上获得了新克隆的回购邮件。
答案 45 :(得分:0)
@SpringBootApplication
答案 46 :(得分:0)
Mac的步骤:
答案 47 :(得分:-4)
如果您使用git,请认真阅读文档。这是一个很多关于此文档的文档。如果你遵循它就不会出错。
如果必须,请重新开始。链接:
https://help.github.com/articles/connecting-to-github-with-ssh/