git@github.com: Permission denied (publickey). fatal: Could not read from remote repository.

遇到 git@github.com: Permission denied (publickey). 这个错误通常意味着你的SSH密钥没有被GitHub识别或配置不正确。这里有几个步骤可以帮助你解决这个问题:

1. 检查SSH密钥是否已添加到GitHub

  1. 查看你的SSH密钥:
    在本地机器上,你可以使用 ssh-keygen -l -E md5 -f ~/.ssh/id_rsa.pub(如果你的私钥文件名不是id_rsa,请相应更改)来查看你的公钥的MD5指纹。

  2. 登录GitHub:
    在GitHub上,进入你的账户设置(点击右上角的头像 -> Settings),然后点击 "SSH and GPG keys"。

  3. 比较指纹:
    检查GitHub上列出的SSH密钥的指纹是否与你在本地机器上看到的指纹相匹配。如果不匹配,你可能需要添加新的密钥或更新现有的密钥。

如果你在执行与SSH密钥相关的命令时遇到“没有此目录”的错误,特别是关于~/.ssh/id_rsa,这通常意味着你的SSH密钥对(id_rsaid_rsa.pub)尚未生成,或者它们不在预期的~/.ssh目录下。下面是一些详细的步骤来帮助你找到或生成SSH密钥,并确保它们位于正确的位置。

1. 检查~/.ssh目录

首先,你需要检查你的用户主目录下是否存在.ssh文件夹。在Unix-like系统(如Linux和macOS)中,你可以使用ls -a命令来列出包括隐藏文件在内的所有文件和文件夹。

bash复制代码
  ls -a ~/.ssh

如果输出显示.ssh目录不存在,那么你需要创建它,并确保它具有适当的权限。

2. 创建.ssh目录(如果它不存在)

如果.ssh目录不存在,你可以使用mkdir命令来创建它,并使用chmod命令来设置正确的权限。

bash复制代码
  mkdir -p ~/.ssh
  chmod 700 ~/.ssh

这里,700权限意味着只有文件所有者可以读取、写入和执行该目录(这是SSH密钥的安全要求)。

3. 生成SSH密钥对

一旦.ssh目录存在并具有正确的权限,你就可以生成SSH密钥对了。使用ssh-keygen命令来做到这一点。

bash复制代码
  ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

在命令中,-t rsa指定密钥类型为RSA,-b 4096指定密钥长度为4096位(这是一种安全的选择),-C后面跟的是你的电子邮件地址(这是一个注释,用于帮助识别密钥,但它不是必需的)。

执行此命令时,系统会提示你输入密钥的存储位置和文件名(默认为~/.ssh/id_rsa),以及一个可选的密码短语(passphrase)。如果你不想设置密码短语,只需按回车即可跳过。

4. 验证SSH密钥的生成

生成密钥后,你应该在~/.ssh目录下看到两个新文件:id_rsa(私钥)和id_rsa.pub(公钥)。你可以使用ls -l ~/.ssh命令来验证它们的存在。

当然,我会详细解答第5步和第6步,这两步涉及到将SSH公钥添加到GitHub并测试SSH连接。

第5步:将公钥添加到GitHub

1. 打开公钥文件

首先,你需要打开包含你的SSH公钥的文件。这个文件通常是~/.ssh/id_rsa.pub(如果你使用的是默认的RSA密钥对名称)。你可以使用任何文本编辑器来打开这个文件,比如nanovimgedit(在GNOME桌面环境中)或TextEdit(在macOS中,但请注意,macOS的默认文本编辑器可能会添加额外的格式,所以最好使用命令行工具或兼容的纯文本编辑器)。

示例(使用cat命令在命令行中查看):

bash复制代码
  cat ~/.ssh/id_rsa.pub

然后,你可以复制输出的公钥内容。

2. 登录GitHub

在Web浏览器中,登录到你的GitHub账户。

3. 导航到SSH密钥设置

  • 点击右上角的头像,选择“Settings”(设置)。
  • 在左侧边栏中,点击“SSH and GPG keys”(SSH和GPG密钥)。

4. 添加新的SSH密钥

  • 在“SSH keys”部分,点击“New SSH key”(新建SSH密钥)按钮。
  • 在“Title”(标题)字段中,输入一个描述性的标题,比如你的计算机名称或电子邮件地址,以便识别这个密钥。
  • 在“Key”(密钥)字段中,粘贴你从id_rsa.pub文件复制的公钥内容。
  • 点击“Add SSH key”(添加SSH密钥)按钮保存。

第6步:测试SSH连接

在将公钥添加到GitHub之后,你应该测试SSH连接以确保一切配置正确。

1. 打开命令行工具

在你的计算机上打开终端或命令行界面。

2. 使用SSH命令测试连接

输入以下命令来测试SSH连接:

bash复制代码
  ssh -T git@github.com

这个命令尝试使用SSH协议连接到GitHub的git用户,但不执行任何实际的Git命令(-T选项禁止分配伪终端)。

3. 验证输出

如果SSH连接成功,你将看到一条类似于以下内容的消息:

复制代码
  Hi username! You've successfully authenticated, but GitHub does not provide shell access.

这里的username会被替换成你的GitHub用户名。这条消息表明你的SSH密钥已经被GitHub成功识别,但你无法通过SSH获得shell访问权限(因为GitHub不提供这种访问)。

如果你看到权限拒绝的错误,比如“Permission denied (publickey)”,那么你需要检查以下几点:

  • 你的公钥是否已正确添加到GitHub。
  • 你的私钥(id_rsa)是否位于~/.ssh目录中,并且该目录的权限设置正确(通常为700)。
  • 你的SSH客户端配置(通常位于~/.ssh/config,但通常不需要更改,除非你有特殊需求)。
  • 你的网络连接是否稳定,且没有防火墙或路由规则阻止SSH连接。

按照这些步骤操作后,你应该能够成功地将SSH公钥添加到GitHub,并通过SSH测试连接到GitHub。

posted @ 2024-07-21 17:42  def_Class  阅读(202)  评论(0编辑  收藏  举报