当前位置: 首页 > backend >正文

【学习记录】github私人仓库创建和本地克隆

0 背景

        本人学习git的时候想要在github上创建私人仓库并且克隆到本地时,出现了一系列问题,相反如果使用gitee,就没有问题。


1 使用SSH协议克隆

1.1 原理解释

        SSH是一种使用加密算法的网络协议,基于TCP工作,默认端口是22。需要在本地生成公钥和私钥,并将公钥配置给github服务器,之后本地发送网络请求后利用本地私钥解密服务器发来的报文以确认身份。

1.2 添加公钥

1.2.1 采用Ed25519算法

ssh-keygen -t ed25519 -C "你的GitHub邮箱地址"

        回车三下,表示默认地址存储、无密码、确认密码。此时会在本地生成公钥以及私钥文件。

Ubunto:

         公钥路径(默认路径):

~/.ssh/id_ed25519.pub

        私钥路径(默认路径):

~/.ssh/id_ed25519

Windows:

        公钥路径(默认路径):

C:\Users\username\.ssh\id_ed25519.pub

        私钥路径(默认路径):

C:\Users\username\.ssh\id_ed25519

1.2.2 采用RSA算法

ssh-keygen -t rsa

        同样回车三下,就会在默认路径下生成用RSA算法生成的公钥私钥文件:

~/.ssh/id_rsa.pub # linux 公钥
~/.ssh/id_rsa # linux 私钥
C:\Users\username\.ssh\id_rsa.pub # Windows 公钥
C:\Users\username\.ssh\id_rsa # Windows 私钥

1.2.3 配置公钥

使用以上其中一种算法生成的公钥即可,虽然同时添加两种公钥并不会冲突。

        Linux系统打印出.pub文件的内容并复制黏贴:

cat ~/.ssh/id_rsa.pub # RSA打印出公钥内容
cat ~/.ssh/id_ed25519.pub # Ed25519打印出公钥内容

        Windows下根据路径用文本文档打开并复制黏贴。

然后:

  1. 登录 GitHub 账号,点击右上角头像 → 选择 Settings(设置)。

  2. 在左侧菜单中找到 SSH and GPG keys → 点击右上角 New SSH key(新建 SSH 密钥)。

  3. 填写密钥信息:

    • Title:自定义名称。
    • Key:粘贴刚才复制的公钥内容。
  4. 点击 Add SSH key(添加 SSH 密钥),若弹出密码验证,输入 GitHub 账号密码确认。

最后可以在命令行输入以下指令来验证是否配置成功:

ssh -T git@github.com

如果验证成功,会返回以下内容:

Hi '你的github姓名'! You've successfully authenticated, but GitHub does not provide shell access.

也可以在github的SSH and GPG keys界面查看,钥匙是绿色的表示被使用过。


1.3 可能遇到问题

完成公钥配置并验证后,发现传输文件时网速很慢,启动Steam++加速器,再次输入指令用于验证是否配置完成:

ssh -T git@github.com

如果返回以下内容:

表示加速器的中间代理服务器发送的服务器公钥与真正的github服务器的主机公钥内容不一致,系统怀疑服务器可能被篡改,要求使用以下指令发生从 known_hosts 移除与 github.com 相关的旧主机密钥记录:

ssh-keygen -f '/home/lhl/.ssh/known_hosts' -R 'github.com'

然后验证ssh配置是否完成:

ssh -T git@github.com

输入yes:

然后被要求输入密码:

再尝试进行克隆:

git clone git@github.com:HenryLin-personal/remote-gitcode.git

发现还是被要求输入密码:

原因:加速器篡改/etc/hosts,github.com被错误解析到 127.0.0.1(本地回环地址),导致 SSH 连接 “假的 GitHub 主机”,进而密钥认证完全失效,被迫 fallback 到已禁用的密码认证。


解决:

        1. 对127.0.0.1 github.com加注释

vim /etc/hosts

        2. 然后清除之前错误解析导致 ~/.ssh/known_hosts 中保存了 “假 GitHub” 的指纹:

ssh-keygen -R github.com

        3. 然后重新验证ssh连接:

ssh -T git@github.com

        验证成功:

Hi HenryLin-personal! You've successfully authenticated, but GitHub does not provide shell access.

注意:如果虚拟机出现任何问题需要快照恢复时,需要重新配置公钥,因为~/.ssh下的公钥私钥文件都可能会丢失!


2 使用HTTPS协议克隆

2.1 注意事项

        当使用以下指令进行克隆时,采用HTTPS协议进行数据传输:

git clone https://github.com/HenryLin-personal/remote-gitcode.git

        Username查看自己仓库路径下的姓名,比如:

        Password方面,从 2021 年 8 月开始,GitHub 不再支持直接使用账号密码通过 HTTPS 进行 Git 操作(如 git clonegit push 等),必须改用 个人访问令牌(Personal Access Token,PAT)。

2.2 令牌创建

        1. 单击右上角头像,下拉找到Settings设置选项

        2. 左边菜单栏下拉找到Developer settings

        3. 点击personal access tokens,发现有两种令牌可供选择,创建其中一种即可,两种都创建也不会冲突

fine-grained tokens:关键是Repository access(仓库的权限)选择Only select repositories,选择需要访问的仓库。


然后再Permissions下Add Permissions中勾选Cotents,表示对文本的权限,在右边勾选Read and write即可。

第一次创建完令牌后,允许查看一次,后续需要自行保存或重新生成:

tokens(classic):关键是勾选repo(repository)即可,表示拥有对仓库操作的全部权限。


2.3 可能遇到问题

加速器启动后,发生证书安装问题:

解决:配置git的证书

git config --global http.sslCAInfo ~/.local/share/Steam++/Plugins/Accelerator/SteamTools.Certificate.cer

http://www.xdnf.cn/news/19805.html

相关文章:

  • CSS 伪类与伪元素:深度解析
  • 从零构建Linux Shell解释器深入理解Bash进程创建机制
  • 【Spring Cloud微服务】11.微服务通信演义:从飞鸽传书到5G全息,一部消息中间件的进化史诗
  • Java项目打包成EXE全攻略​
  • Ubuntu22.04下编译googletest源代码生成.so动态库
  • 利用 openssl api 实现 TLS 双向认证
  • MySQL-MVCC多版本并发控制详解
  • LangChain实战(十二):自定义Tools扩展Agent能力
  • Python+DRVT 从外部调用 Revit:批量创建门
  • Streamable HTTP
  • sv中forever如何结束
  • AI 在金融、医疗、教育、制造业等领域有着广泛的应用,以下是这些领域的一些落地案例
  • STM32HAL 快速入门(十七):UART 硬件结构 —— 从寄存器到数据收发流程
  • 告别剪辑烦恼!3个超实用技巧,让你的视频瞬间高级起来
  • 【音视频】视频秒播优化实践
  • UnityWebRequest 数据获取和提交
  • wpf 只能输入int类型的文本框
  • WebSocket客户端库:websocket-fruge365
  • Ubuntu下把 SD 卡格式化为 FAT32
  • Hostol Magento电商服务器套餐:基于阿里云,预配置高性能环境,一键开店
  • 如何用java给局域网的电脑发送开机数据包
  • B样条曲线,已知曲线上的某个点到起点的距离,确定这个点的参数u的值的方法
  • 新手向:破解VMware迁移难题
  • MP4视频太大如何压缩?分享6种简单便捷的压缩小技巧
  • websocket用于控制在当前页只允许一个用户进行操作,其他用户等待
  • 硬件(一)51单片机
  • 阿里开源首个图像生成基础模型——Qwen-Image本地部署教程,中文渲染能力刷新SOTA
  • HTTP 协议核心组件与安全扩展深度解析
  • 机器学习与深度学习的 Python 基础之 NumPy(2)
  • uniapp+vue3 微信小程序全屏广告组件功能