git-连接远程服务器的代理方案
前言
国内连 Github 是个很头疼的问题。浏览器还好,只要电脑挂了代理一般就没什么问题;主要是终端使用有些麻烦。折腾出来的最佳实践如下。
Github推荐代码仓库尽量使用ssh
协议,也就是以以 git@github.com
开头的链接
代码仓库还可以使用 HTTPS 协议,也就是以 https://github.com
开头的链接
如果您使用HTTPS 链接,可以通过 git config
方便地设置代理,将在后文讲述
设置系统环境变量
Git自带了一堆非常方便的工具应用,下面设置代理时需要用到,所以首先需要设置系统环境变量
打开Windows的文件资源管理器
右键点击“此电脑”,依次选择属性-高级系统设置-高级-环境变量
在下方的系统变量
栏中找到变量
为Path
的项,点击后选择编辑
,新增项为
C:\Program Files\Git\cmd
C:\Program Files\Git\bin
点击确定,重启电脑,完成设置
仓库设置使用什么协议,SSH or HTTPS?
Github推荐代码仓库尽量使用ssh
协议,也就是以以 git@github.com
开头的链接
Github在2021年8月13日停止了对https协议用户名及验证码的支持,取而代之的是使用oauth在线认证,但这十分不便,故推荐代码仓库尽量使用ssh
协议
请使用SSH协议+http代理
下面开始讲述Git设置代理的方式
克隆 repo 的两种方式:https 和 ssh 方式,需要设置不同的代理
# https 方式:
git clone https://github.com/owner/git.git
# ssh 方式:
git clone git@github.com:owner/git.git
Github在2021年8月13日停止了对https协议用户名及验证码的支持,取而代之的是使用oauth在线认证,但这十分不便,故推荐代码仓库尽量使用ssh
协议
SSH协议,设置走代理
关于github配置使用ssh的相关内容见git配置使用ssh
Github在2021年8月13日停止了对https协议用户名及验证码的支持,取而代之的是使用oauth在线认证,但这十分不便,故推荐代码仓库尽量使用ssh
协议
想使用ssh
协议连接Github服务器,可以如此修改,推荐:
git remote set-url origin git@github.com:owner/git.git #set your ssh repo url
查看是否修改成功:
git remote -v
origin git@github.com:owner/git.io.git (fetch)
origin git@github.com:owner/git.io.git (push)
Linux环境下修改 ~/.ssh/config
文件(不存在则新建):
vim ~/.ssh/config
windows下修改 C:/Users/Your_Username/.ssh/config
文件(不存在则新建):
# 也可使用git bash运行命令
vim ~/.ssh/config
内容如下:
Host github.com *.github.com
User git
# SSH默认端口22, HTTPS默认端口443
Port 22
Hostname %h
# # 注意修改路径为你的路径
# IdentityFile ~/.ssh/id_ed25519
AddKeysToAgent yes
TCPKeepAlive yes
# Linux/Mac走 HTTP 代理,需要安装socat, brew install socat
# ProxyCommand socat - PROXY:127.0.0.1:%h:%p,proxyport=8080
# linux/Mac走 socks5 代理(如 Shadowsocks) nc是linux自带的工具
# ProxyCommand nc -v -x 127.0.0.1:1080 %h %p
# Windows走 HTTP 代理,connect是git自带的工具
# ProxyCommand connect -H 127.0.0.1:7890 -a none %h %p
# Windows走 socks5 代理(如 Shadowsocks)
# ProxyCommand connect -S 127.0.0.1:7890 -a none %h %p
具体的端口视你电脑本地的代理软件(Shadowsocks、Clash等)而异。
Windows用户,要使用代理,需要使用connect
注意!!对于Windows用户,要使用代理,需要使用connect
:
这里命令中的 -a none 是 NO-AUTH 模式,参见 https://bitbucket.org/gotoh/connect/wiki/Home 中的 More detail 一节
connect
是Git Bash
内置的命令行工具,Git Bash
是Git
内置的shell实现,安装git见git-安装-配置
您需要安装Git
,并且配置好环境变量如下:
C:\Program Files\Git\cmd
C:\Program Files\Git\bin
之后,可输入下列命令验证
connect
检查是否配置成功
在命令行程序或者Git bash等其他shell中,运行下面的命令
ssh -T git@github.com
结果如下即正常:
Hi! You've successfully authenticated, but GitHub does not provide shell access.
若出现问题请见下面的常见问题
使用socks5代理,有时会被拒绝连接
使用 Git Push 提交代码到远程服务器时提示了一个错误
fatal: NotSupportedException encountered.
ServicePointManager 不支持具有 socks5 方案的代理。
原因是,GitHub在2020年12月份后,使用socks5代理,有时会被拒绝连接,详情见,git-push-提示不支持具有-socks5-方案的代理
取而代之,请使用SSH协议+http代理,这样就可以解决
注意,在SSH协议通信中,使用http代理十分不安全!!
显示远程主机已关闭连接
请使用SSH协议+http代理
检查端口填写是否正确。
检查依赖是否存在,是否配置了环境变量
其他SSH设置
您可以修改 ~/.ssh/config
文件(不存在则新建),文件开头新增:
Host *
ServerAliveInterval 120
ServerAliveCountMax 5
这有时候能解决一些网络问题
HTTPS协议,设置走代理
Github在2021年8月13日停止了对https协议用户名及验证码的支持,取而代之的是使用oauth在线认证,但这十分不便,故推荐代码仓库尽量使用ssh
协议
请使用SSH协议+http代理
不推荐使用HTTPS协议,如果必须这么做,修改如下:
git remote set-url origin https://github.com/owner/git.git #set your https repo url
查看是否修改成功:
git remote -v
origin https://github.com/xxx/xxx.github.io.git (fetch)
origin https://github.com/xxx/xxx.github.io.git (push)
下文将仔细讲述代理配置过程
# https协议设置走 HTTP 隧道代理
git config --global http.proxy "http://127.0.0.1:1080"
# 下面这条会丧失安全性
git config --global https.proxy "http://127.0.0.1:1080"
# https协议设置走 socks5 隧道代理(如使用 Shadowsocks)
git config --global http.proxy "socks5://127.0.0.1:1080"
git config --global https.proxy "socks5://127.0.0.1:1080"
注意https.proxy设置为HTTP 代理会丧失安全性
- 具体的端口视你电脑本地的代理软件(Shadowsocks、Clash等)而异。具体见index-proxy
取消设置代理的命令如下:
# 取消设置
git config --global --unset http.proxy
git config --global --unset https.proxy
使用socks5代理,有时会被拒绝连接
使用 Git Push 提交代码到远程服务器时提示了一个错误
fatal: NotSupportedException encountered.
ServicePointManager 不支持具有 socks5 方案的代理。
原因是,GitHub在2020年12月份后,使用socks5代理,有时会被拒绝连接,详情见,git-push-提示不支持具有-socks5-方案的代理
取而代之,请使用SSH协议+http代理,这样就可以解决
注意,在SSH协议通信中,使用http代理十分不安全!!
使用 HTTPS 协议后 push 时提示需要输入用户名和密码
git-使用https协议后-push时提示需要输入username和password
Github在2021年8月13日停止了对https协议用户名及验证码的支持,取而代之的是使用oauth在线认证,但这十分不便,故推荐代码仓库尽量使用ssh
协议
参考、引用、致谢
部分来自:https://molunerfinn.com/git-ssh2https/
macOS 给 Git(Github) 设置代理(HTTP/SSH), see, https://gist.github.com/chuyik/02d0d37a49edc162546441092efae6a1