Git 使用 代理
首先Git 与远程仓库(如 Github) 的连接有两种,分别是 Http 和 SSH
HTTP 启用代理
首先介绍命令 git config --global
。git config --global
是用于设置全局Git配置的命令。通过 --global
选项,你可以将配置应用到当前用户下所有的Git仓库,而不仅仅是当前仓库。
以下是几个常见的用法示例:
- 设置用户名:
1
git config --global user.name "Your Name"
- 设置邮箱:
1
git config --global user.email "yourname@example.com"
- 配置默认的文本编辑器:
1
git config --global core.editor "vim"
- 显示已设置的全局配置:
1
git config --global --list
- 同理设置全局的 Http 代理
1
2
3
4
5
6
7
8
9
10
11
12# Sock5 代理
git config --global http.proxy socks5://127.0.0.1:7890
git config --global https.proxy socks5://127.0.0.1:7890
#需要用户名和密码进行验证并限定代理的域名(如 github.com):
git config --global http.proxy.https://<域名>.proxy <用户名>:<密码>@<代理地址>
git config --global https./<域名>.proxy <用户名>:<密码>@<代理地址>
#如果你想禁用全局代理,可以使用以下命令:
git config --global --unset http.proxy
git config --global --unset https.proxy
SSH 启用代理
回顾一下当使用 git clone
命令通过SSH克隆代码仓库时,背后涉及到以下原理:
SSH 密钥对生成:首先,你需要在本地计算机上生成一对 SSH 密钥(公钥和私钥)。在生成密钥对时,公钥将被添加到你的 GitHub 账户中,而私钥则保留在你的本地计算机上。
1
ssh-keygen -t rsa -C "your_email@example.com" -f ~/.ssh/name_of_your_private_key
SSH 连接建立:通过 SSH 协议,你的本地计算机与远程服务器之间建立一个加密的连接。这个连接用于在本地计算机和远程代码仓库之间传输数据。在建立连接时,SSH 将使用你的私钥与远程服务器进行身份验证。
远程仓库验证:当连接建立后,Git 将使用你提供的 SSH URL 来访问远程代码仓库。在这个过程中,Git 使用你的公钥在远程服务器上进行身份验证,以确认你具有访问该代码仓库的权限。
代码仓库克隆:一旦成功验证身份并获得了访问权限,Git 将从远程仓库拉取所有代码和历史记录,并在本地创建一个与远程仓库相同的副本。这样,你就可以在本地计算机上对代码进行修改、提交和推送。
通常通过命令
1 | ssh -vvvT git@github.com -i ~/.ssh/name_of_your_private_key |
来check 2、3步。参数中 v 的数量越多,返回的 debug 信息越多。
值得注意的是 ssh 在默认情况下只会使用 ~/.ssh/id_<Algorithm>
的 private key。<Algorithm>
表示加密算法比如 RSA,ECDSA 等。所以如果你生成密钥时指定了特定的名字,需要在连接时需要用参数 -i
指定私钥的路径。
Config
为了避免每次都需要制定冗长的参数,~/.ssh/config
文件应运而生,使我们的 ssh 命令十分简洁。
~/.ssh/config
文件结构如下:
1 | Host myserver # 指定主机的别名,用于标识该连接配置适用于哪个主机。可以使用通配符 `*` 匹配多个主机别名。 |
原本的 ssh 命令
1 | ssh myusername@192.168.1.100 -p 22 -i ~/.ssh/id_rsa_server |
而当我们配置好上面的 config 文件后,ssh 命令简化为
1 | ssh myserver |
为了启用代理我原本是这么写的
1 | Host github.com |
ProxyCommand
表示使用代理连接。connect
是一个用于建立连接的工具,-S 127.0.0.1:7890
指定代理服务器的地址和端口号 。%h
和 %p
是SSH配置中的占位符,分别代表目标主机和目标端口。
然而报错
1 | kex_exchange_identification: Connection closed by remote host |
端口换成 443,主机名改为 ssh.github.com
成功。
1 | Host github.com |
推断原因可能是代理服务器的DNS解析的问题。