Skip to main content

Enterprise Server 3.22 目前作为发布候选版本提供。

错误:权限被拒绝(公钥)

“权限被拒绝”错误表示服务器拒绝了您的连接。 可能有多个原因,最常见的如下所述。

Platform navigation

是否应将 sudo 命令或提升的权限与 Git 一起使用?

不应将 sudo 命令或提升的权限(如管理员权限)与 Git 一起使用。

如果有一个很好的_理由_必须使用 sudo,请确保将它与每个命令一起使用。 如果在不使用 的情况下sudo,然后尝试使用 sudo git push 之类的命令,则将不会使用生成的相同密钥。

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

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

Shell
ssh -vT git@HOSTNAME

你应该会看到以下输出:

> 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 HOSTNAME port 22.

应在端口 22 上建立连接。

始终使用 "git" 用户

所有连接(包括远程 URL 的连接)必须以 "git" 用户进行。 如果尝试以 GitHub 用户名连接,将会失败:

$ ssh -T GITHUB-USERNAME@HOSTNAME
> Permission denied (publickey).

如果连接失败且你通过 GitHub 用户名使用远程 URL,则可以更改远程 URL 以使用“git”用户

应键入以下命令来验证连接:

Shell
ssh -T git@HOSTNAME

你应该会看到以下输出:

> 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
    

    数据reusables.desktop.windows_git_for_windows_turn_on_ssh_agent %}

    注意

    上述 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,除非您在生成密钥时更改文件名。

获取更多详细信息

也可通过尝试连接到 git@HOSTNAME 来检查使用的密钥:

Shell
ssh -vT git@HOSTNAME

你将看到如下所示的输出:

> ...
> 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 未找到任何键。

  • “identity file”行末的“-1”表示 SSH 找不到可使用的文件。
  • “尝试使用私钥”的行表示没有找到任何文件。

如果文件存在,则这些行将分别是“1”和“Offering public key”,如此输出所示:

> ...
> 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 任意页面的右上角,单击你的个人资料照片,然后单击“ Settings”。1. 在边栏的“Access”部分中,单击 “SSH and GPG keys”

  5. 将 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 任意页面的右上角,单击你的个人资料照片,然后单击“ Settings”。1. 在边栏的“Access”部分中,单击 “SSH and GPG keys”

  5. 将 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 任意页面的右上角,单击你的个人资料照片,然后单击“ Settings”。1. 在边栏的“Access”部分中,单击 “SSH and GPG keys”

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

如果在 GitHub 中未看到公钥,则需要将 SSH 密钥添加到 GitHub 并将其与计算机关联。

警告

如果在 GitHub 上看到不熟悉的 SSH 密钥,请立即将其删除并联系 寻求进一步的帮助。 无法识别的公钥可能表示安全问题。 有关详细信息,请参阅“检查 SSH 密钥”。