我用的是Mac雪豹,刚刚安装了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没有密码,但仍然错误。


当前回答

让我也分享一下我的经验,

我试图从Gerrit回购中克隆一些项目,我在帐户设置中获得了我的公钥。

在第一次尝试克隆git时,我得到了以下错误:

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克隆。

希望GIT_SSH_COMMAND环境变量完成了这项工作:

export GIT_SSH_COMMAND="ssh -oKexAlgorithms=+diffie-hellman-group1-sha1"

但是git克隆仍然没有开始工作。现在它抛出(关于主题):

Permission denied (publickey).

我已经得到SSH密钥,不想重新生成它们。我检查了普通的SSH连接到主机,它是ok的:

****    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变量的开销-我的密钥是用passphrase保护的(我在检查登录到git repo主机时输入了它)。

所以,我决定去掉这个短语。一个简单的命令帮助了我:

ssh-keygen -p

然后,我输入了我的“旧密码”的密码短语,并在“新密码”上按了两次ENTER键,让它空着,即根本没有密码短语,并确认我的选择。

之后,我在本地磁盘上获得了新克隆的回购。

其他回答

当您正在访问SSH URL(读/写)而不是Git只读URL,但您没有对该repo的写访问权限时,可能会发生此错误。

有时你只是想克隆你自己的repo,例如部署到服务器上。在这种情况下,实际上只需要READ-ONLY访问。但由于这是你自己的回购,GitHub可能会显示SSH URL,如果这是你的偏好。在这种情况下,如果您的远程主机的公钥不在您的GitHub SSH密钥中,您的访问将被拒绝,这是预期会发生的。

一个等效的情况是,当您尝试克隆其他人的回购时,您没有SSH URL的写访问权。

总之,如果您的意图是只克隆一个repo,请使用HTTPS URL (https://github.com/{user_name}/{project_name}.git)而不是SSH URL (git@github.com:{user_name}/{project_name}.git),这样可以避免(不必要的)公钥验证。


更新:GitHub现在显示HTTPS作为默认协议,这一举动可能会减少SSH url的滥用。

如果用户未生成之前设置的ssh公私钥对

此信息在聊天上工作,但可以应用于所有其他支持SSH pubkey身份验证的git存储库。(参见[gitolite][1], gitlab或github。)

首先设置您自己的公钥/私钥对集。这 可以使用DSA或RSA,所以基本上你设置的任何密钥都可以工作。 在大多数系统上,您可以使用ssh-keygen。

First you'll want to cd into your .ssh directory. Open up the terminal and run: cd ~/.ssh && ssh-keygen Next you need to copy this to your clipboard. On OS X run: cat id_rsa.pub | pbcopy On Linux run: cat id_rsa.pub | xclip On Windows (via Cygwin/Git Bash) run: cat id_rsa.pub | clip On Windows (Powershell) run: Get-Content id_rsa.pub | Set-Clipboard (Thx to @orion elenzil) Add your key to your account via the website. Finally setup your .gitconfig. git config --global user.name "bob" git config --global user.email bob@... (don't forget to restart your command line to make sure the config is reloaded) That's it you should be good to clone and checkout.

更多信息请访问https://help.github.com/articles/generating-ssh-keys(感谢@Lee Whitney) [1]: https://github.com/sitaramc/gitolite

-

如果用户已经生成了之前设置的ssh公私钥对

检查哪个密钥已被授权在您的github或gitlab帐户设置 确定必须从本地计算机关联哪个相应的私钥

Eval $(ssh agent -s)

定义键的位置

ssh-add ~ / . ssh / id_rsa

我得到这个错误,因为我生成的ssh密钥与错误的电子邮件。我可以使用ssh连接,但不能使用git。解决方案是使用我的github帐户的主要电子邮件地址重新生成密钥。

以admin身份执行终端。

如果终端看不到你的.ssh,它就会返回这个错误。

最简单的方法之一

〇前往终点站

  git push <Git Remote path> --all