协慌网

登录 贡献 社区

使用 Git 时如何解决权限被拒绝(公钥)错误?

我在 Mac Snow Leopard 上,并且刚刚安装了git

我刚试过

git clone [email protected]:cakebook.git

但这给了我这个错误:

Initialized empty Git repository in `/Users/username/Documents/cakebook/.git/`
Permission denied (publickey).
fatal: The remote end hung up unexpectedly

我想念什么?
我也尝试过使用ssh-keygen而不设置密码,但是仍然存在相同的错误。

答案

如果用户之前未生成 ssh 公用 / 专用密钥对

该信息在 theChaw 上有效,但可以应用于支持 SSH pubkey 身份验证的所有其他 git 存储库。 (例如,请参见gitolite ,gitlab 或 github。)

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

  • 首先,您需要 CD 进入. 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 [email protected] (不要忘记重新启动命令行以确保重新加载了配置)

就是这样,您应该很好地克隆和签出。

有关更多信息,参见 https://help.github.com/articles/generating-ssh-keys(感谢 @Lee Whitney)-

如果用户之前已经生成了 ssh 公用 / 专用密钥对

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

eval $(ssh-agent -s)

  • 定义按键的位置

ssh-add ~/.ssh/id_rsa

可以使用以下方法完成更广泛的故障排除甚至自动修复:

ssh -vT [email protected]

资料来源: https://help.github.com/articles/error-permission-denied-publickey/

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

有时,您只想克隆自己的存储库,例如,部署到服务器。在这种情况下,您实际上仅需要只读访问权限。但是,由于那是您自己的存储库,因此如果您愿意,GitHub 可能会显示 SSH URL。在这种情况下,如果远程主机的公共密钥不在 GitHub SSH 密钥中,则将拒绝您的访问,这将有望发生

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

简而言之,如果您打算仅克隆存储库,请使用 HTTPS URLhttps://github.com/{user_name}/{project_name}.git [email protected]:{user_name}/{project_name}.git )而不是 SSH URL([email protected]:{user_name) [email protected]:{user_name}/{project_name}.git ),它避免了(不必要的)公共密钥验证。


更新:GitHub 现在显示 HTTPS 为默认协议,此举可能会减少 SSH URL 的滥用。