首页 > 其他分享 >[email protected]: Permission denied (publickey). fatal: Could not read from remote repository.

[email protected]: Permission denied (publickey). fatal: Could not read from remote repository.

时间:2024-07-21 17:40:21浏览次数:14  
标签:git remote repository 密钥 rsa GitHub ssh id SSH

遇到 [email protected]: 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 "[email protected]"

在命令中,-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 [email protected]

这个命令尝试使用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。

标签:git,remote,repository,密钥,rsa,GitHub,ssh,id,SSH
From: https://www.cnblogs.com/WG11/p/18314736

相关文章

  • 对于同一个项目,同时将其git到GitHub和Gitee
    对于同一个项目,你可以同时将其git到GitHub和Gitee。这通常通过配置多个远程仓库地址来实现。以下是一步步的操作指南:一、在GitHub和Gitee上创建仓库GitHub:登录GitHub账号。点击右上角的“+”号,选择“Newrepository”创建一个新的仓库。填写仓库名称、描述等信息,并创建仓库......
  • 虚拟机配置git连接gitee
    1、安装git终端输入sudoapt-getinstallgit2、配置git配置用户名终端输入gitconfig--globaluser.name"yourname",将替换成你的用户名(一般就和gitee上的用户名一致就行)配置邮箱终端输入gitconfig--globaluser.email"youremail",将替换成gitee绑定的邮箱......
  • GitHub每日最火火火项目(7.20)
    项目名称:mem0ai/mem0项目介绍:mem0是PersonalizedAI的内存层。它可能在个性化人工智能的开发中起到关键作用,具体的功能和特点可能包括高效的数据存储和管理,以支持个性化的模型训练和推理。通过优化内存使用,它可以提高人工智能系统的性能和响应速度,为用户提供更个性化......
  • GitHub每日最火火火项目(7.19)
    项目名称:mem0ai/mem0项目介绍:mem0是为个性化AI提供的内存层。它在个性化AI系统中可能起着关键作用,有助于高效地存储和管理数据,以支持个性化模型的训练和推理。通过优化内存使用,它可以提高AI系统的性能和响应速度,为用户提供更精准和个性化的服务。具体来说,它可能能够有效......
  • GitHub每日最火火火项目(7.18)
    项目名称:mem0ai/mem0项目介绍:mem0是用于个性化AI的内存层。它可能在构建个性化人工智能系统中发挥着重要作用,具体的功能和特点可能包括高效的数据存储和管理,以支持个性化的模型训练和推理。通过优化内存使用,它可以提高人工智能系统的性能和响应速度,为用户提供更加个性化......
  • 从零开始:如何使用GitHub与Hexo搭建个人博客
    搭建效果:[Dangrow的技术博客]https://tangwanying.xyz一、首先创建一个GitHub仓库如图,资源的名称可以是你的用户名+github+io(ps:因为我已经搭建过了,所以下图会出现仓库已存在的警告)二、本地安装git这里建议本地与GitHub采用SSH连接,防止经常连接不到的错误git官网连接三、......
  • Git入门
    初始化配置配置用户名gitconfig--globaluser.name"YourName"配置邮箱gitconfig--globaluser.email"[email protected]"存储配置(存储用户名邮箱)gitconfig--globalcredential.helperstore创建仓库创建一个新的本地仓库(省略project-name则在当前目录创建)g......
  • 如何在 github 操作中排除对主分支文件夹的检查黑色格式化程序?
    我学习Python,我想使用GitHub操作,但我对BlackFormatter有疑问,因为它检查拉请求中的所有文件(也来自主分支),但我不需要它。我已尝试使用命令包含/排除搜索的任何选项,但都不起作用。我的问题是什么?我在.yml中使用此代码:-uses:actions/checkout@v3-u......
  • github如何实现和gitlab的同步
    要实现GitHub和GitLab之间的同步,你可以使用以下几种方法。这里介绍两种常用的方法:使用GitLabCI/CD和使用镜像仓库。方法1:使用GitLabCI/CD通过GitLabCI/CD,可以在每次推送到GitLab时自动同步到GitHub。以下是具体步骤:步骤1:在GitHub上创建一个空仓库在Git......
  • Tool-Gitlab-CICD-jobs-删除或清空
    Tool-Gitlab-CICD-jobs-删除或清空清空GitLab项目中所有的CI/CDJobs列表或者说是清除Pipeline的历史记录,可以通过GitLab的Web界面或者API来实现。注意:会删除Pipeline的记录和相关联的Job日志、Artifacts等信息,操作前请确保已经做好相应数据的备份。通过Web界面清空登录到Git......