跳至主要内容

错误:权限被拒绝 (publickey)

“权限被拒绝”错误意味着服务器拒绝了您的连接。可能有多种原因导致此错误,以下解释了最常见的示例。

平台导航

是否应将 `sudo` 命令或提升的权限与 Git 配合使用?

您不应将 `sudo` 命令或提升的权限(例如管理员权限)与 Git 配合使用。

如果您有 *非常充分的理由* 必须使用 `sudo`,则确保您在每个命令中都使用它。如果您 生成 SSH 密钥 时没有使用 `sudo`,然后尝试使用类似 `sudo git push` 的命令,则您将不会使用您生成的相同密钥。

检查您是否连接到正确的服务器

要确保您连接到正确的域名,您可以输入以下命令:

您应该看到此输出:

> OpenSSH_8.1p1, LibreSSL 2.7.3
> debug1: Reading configuration data /Users/YOU/.ssh/config
> debug1: Reading configuration data /etc/ssh/ssh_config
> debug1: /etc/ssh/ssh_config line 47: Applying options for *
> debug1: Connecting to github.com port 22.

除非您覆盖设置以使用 通过 HTTPS 使用 SSH,否则连接应在 22 端口上建立。

始终使用“git”用户

所有连接(包括远程 URL 的连接)都必须以“git”用户身份建立。如果您尝试使用您的 GitHub 用户名连接,则会失败。

$ ssh -T [email protected]
> Permission denied (publickey).

如果您的连接失败,并且您使用的是包含您的 GitHub 用户名的远程 URL,您可以 更改远程 URL 以使用“git”用户

您应该通过键入以下内容来验证您的连接:

您应该看到此输出:

> Hi USERNAME! You've successfully authenticated...

确保您正在使用密钥

  1. 打开 终端终端Git Bash

  2. 验证您是否已生成私钥并将其加载到 SSH 中。

    # start the ssh-agent in the background
    $ eval "$(ssh-agent -s)"
    > Agent pid 59566
    $ ssh-add -l -E sha256
    > 2048 SHA256:274ffWxgaxq/tSINAykStUL7XWyRNcRTlcST1Ei7gBQ /Users/USERNAME/.ssh/id_rsa (RSA)
    

如果您已安装 GitHub Desktop,则可以使用它来克隆存储库,而无需处理 SSH 密钥。

  1. **如果您使用的是 Git Bash**,请打开 ssh-agent:

    # start the ssh-agent in the background
    $ eval "$(ssh-agent -s)"
    > Agent pid 59566
    

    **如果您使用的是其他终端提示符**,例如 Git for Windows,请打开 ssh-agent:

    # start the ssh-agent in the background
    $ eval $(ssh-agent -s)
    > Agent pid 59566
    

    注意

    上面的 eval 命令会在您的环境中手动启动 ssh-agent。如果 ssh-agent 已经作为后台系统服务运行,则这些命令可能会失败。如果发生这种情况,我们建议您检查您环境的相关文档。

  2. 验证您是否已生成私钥并将其加载到 SSH 中。

    $ ssh-add -l -E sha256
    > 2048 SHA256:274ffWxgaxq/tSINAykStUL7XWyRNcRTlcST1Ei7gBQ /Users/USERNAME/.ssh/id_rsa (RSA)
    
  1. 打开 终端终端Git Bash

  2. 验证您是否已生成私钥并将其加载到 SSH 中。

    $ ssh-add -l -E sha256
    > 2048 SHA256:274ffWxgaxq/tSINAykStUL7XWyRNcRTlcST1Ei7gBQ /Users/USERNAME/.ssh/id_rsa (RSA)
    

`ssh-add` 命令 *应该* 打印出一长串数字和字母。如果它没有打印任何内容,则需要 生成新的 SSH 密钥 并将其与 GitHub 关联。

提示

在大多数系统上,默认私钥(`~/.ssh/id_rsa` 和 `~/.ssh/identity`)会自动添加到 SSH 身份验证代理。除非您在生成密钥时覆盖文件名,否则您不需要运行 `ssh-add path/to/key`。

获取更多详细信息

您还可以通过尝试连接到 `[email protected]` 来检查密钥是否正在使用。

您将看到如下输出:

> ...
> debug1: identity file /Users/YOU/.ssh/id_rsa type -1
> debug1: identity file /Users/YOU/.ssh/id_rsa-cert type -1
> debug1: identity file /Users/YOU/.ssh/id_dsa type -1
> debug1: identity file /Users/YOU/.ssh/id_dsa-cert type -1
> ...
> debug1: Authentications that can continue: publickey
> debug1: Next authentication method: publickey
> debug1: Trying private key: /Users/YOU/.ssh/id_rsa
> debug1: Trying private key: /Users/YOU/.ssh/id_dsa
> debug1: No more authentication methods to try.
> Permission denied (publickey).

在此示例中,SSH 未找到任何密钥。

  • “身份文件”行的末尾的“-1”表示 SSH 找不到要使用的文件。
  • “尝试私钥”行表示未找到文件。

如果存在文件,这些行将为“1”和“提供公钥”,如下输出所示:

> ...
> debug1: identity file /Users/YOU/.ssh/id_rsa type 1
> ...
> debug1: Authentications that can continue: publickey
> debug1: Next authentication method: publickey
> debug1: Offering RSA public key: /Users/YOU/.ssh/id_rsa

验证公钥是否已附加到您的帐户

您必须向 GitHub 提供您的公钥才能建立安全连接。

  1. 打开终端。

  2. 在后台启动 SSH 代理。

    $ eval "$(ssh-agent -s)"
    > Agent pid 59566
    
  3. 找到并记下你的公钥指纹。

    $ ssh-add -l -E sha256
    > 2048 SHA256:274ffWxgaxq/tSINAykStUL7XWyRNcRTlcST1Ei7gBQ /Users/USERNAME/.ssh/id_rsa (RSA)
    
  4. 在GitHub任意页面的右上角,点击你的个人资料照片,然后点击 设置.

  5. 在侧边栏的“访问”部分,点击 SSH和GPG密钥

  6. 将SSH密钥列表与ssh-add命令的输出结果进行比较。

  1. 打开命令行。

  2. 在后台启动 SSH 代理。

    $ ssh-agent -s
    > Agent pid 59566
    
  3. 找到并记下你的公钥指纹。

    $ ssh-add -l -E sha256
    > 2048 SHA256:274ffWxgaxq/tSINAykStUL7XWyRNcRTlcST1Ei7gBQ /Users/USERNAME/.ssh/id_rsa (RSA)
    
  4. 在GitHub任意页面的右上角,点击你的个人资料照片,然后点击 设置.

  5. 在侧边栏的“访问”部分,点击 SSH和GPG密钥

  6. 将SSH密钥列表与ssh-add命令的输出结果进行比较。

  1. 打开终端。

  2. 在后台启动 SSH 代理。

    $ eval "$(ssh-agent -s)"
    > Agent pid 59566
    
  3. 找到并记下你的公钥指纹。如果你使用的是OpenSSH 6.7或更旧版本

    $ ssh-add -l
    > 2048 a0:dd:42:3c:5a:9d:e4:2a:21:52:4e:78:07:6e:c8:4d /Users/USERNAME/.ssh/id_rsa (RSA)
    

    如果你使用的是OpenSSH 6.8或更新版本

    $ ssh-add -l -E md5
    > 2048 MD5:a0:dd:42:3c:5a:9d:e4:2a:21:52:4e:78:07:6e:c8:4d /Users/USERNAME/.ssh/id_rsa (RSA)
    
  4. 在GitHub任意页面的右上角,点击你的个人资料照片,然后点击 设置.

  5. 在侧边栏的“访问”部分,点击 SSH和GPG密钥

  6. 将SSH密钥列表与ssh-add命令的输出结果进行比较。

如果在GitHub上没有看到你的公钥,你需要将你的SSH密钥添加到GitHub 以将其与你的计算机关联。

警告

如果你在GitHub上看到你不熟悉的SSH密钥,请立即将其删除,并通过GitHub支持门户联系我们寻求进一步帮助。未知的公钥可能表明存在潜在的安全问题。更多信息,请参见“查看你的SSH密钥”。