【学习记录】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下根据路径用文本文档打开并复制黏贴。
然后:
登录 GitHub 账号,点击右上角头像 → 选择 Settings(设置)。
在左侧菜单中找到 SSH and GPG keys → 点击右上角 New SSH key(新建 SSH 密钥)。
填写密钥信息:
- Title:自定义名称。
- Key:粘贴刚才复制的公钥内容。
点击 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 clone
、git 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