Proxy 一般有2种协议,一种是 HTTP/HTTPS 协议,一种是 SOCKS 协议。优先使用 SOCKS 协议的 SOCKS5 版本。[2种协议的区别 待补充外部引用]
一般各平台的 Shadowsocks 客户端除了提供一个本地的 socks5 Proxy ,还会提供一个本地的 http Proxy 。 在 ShadowSocks 中的高级设置中查看 socks5 协议监听的端口,HTTP Proxy 设置中查看 http 协议监听的端口。
注意:
shadowsocks-windows
的socks5和http端口号是同一个,所以不用费尽心思在软件设定中找单独的http端口设置功能了。
- 使用
Proxy SwitchyOmega
这个插件来管理 proxy。 - 在 chrome 使用 proxy 管理插件的时候注意为每个情景填写正确的协议名和端口。
- 打开 “Preferences -> Package Settings -> Package Control-> Settings – User”
- 在 JSON 文件中插入
"http_proxy": "socks5://127.0.0.1:1080",
"https_proxy": "socks5://127.0.0.1:1080",
Sublime Text 3 支持 HTTP/HTTPS 协议、 SOCKS 协议。
使用 SSH 的 ProxyCommand
选项,配合 nc
或者connect
等命令,实现 Proxy 。
- 命令行模式
# HTTP Proxy:
ssh -o "ProxyCommand connect -H 127.0.0.1:7070 %h %p" user@server.net
# SOCKS5 Proxy:
ssh -o "ProxyCommand connect -S 127.0.0.1:1080 %h %p" user@server.net
- 设置
SSH
配置文件
一般
SSH
配置文件位置:~/.ssh/config
。 更多SSH
设置详见:SSH_CONFIG(5)。
示例: 仅对 User 为: git
访问 HostName 为: github.com
域名有效
Host github.com
HostName github.com
############
# 如果使用git@ssh.github.com进行传输,HostName和Port设置如下,
# 详见 https://help.github.com/articles/using-ssh-over-the-https-port/
# HostName ssh.github.com
# Port 443
############
User git
# HTTP Proxy:
# ProxyCommand connect -H 127.0.0.1:7070 %h %p
# SOCKS5 Proxy:
# ProxyCommand connect -S 127.0.0.1:1080 %h %p
示例: 全局,即对任意域名均有效
Host *
# HTTP Proxy:
# ProxyCommand connect -H 127.0.0.1:7070 %h %p
# SOCKS5 Proxy:
# ProxyCommand connect -S 127.0.0.1:1080 %h %p
connect
is the simple relaying command to make network connection via SOCKS and https proxy. It is mainly intended to be used as proxy command of OpenSSH. You can make SSH session beyond the firewall with this command.
- Mac 下安装
brew install connect
git
目前支持的三种协议http://
和https://
,ssh://
,git://
远程仓库链接格式类似:
http://github.com/cms-sw/cmssw.git
https://github.com/cms-sw/cmssw.git
实际调用 libcurl
与服务器通信,详见curl(1)的--proxy
选项以及git-config(1)中的http.proxy
条目。
- 直接使用终端的 Proxy 设置
仅限终端环境中有效.
- 设置
http.proxy
和https.proxy
终端命令:
# 设置全域有效
git config --global http.proxy 'socks5://127.0.0.1:1080'
git config --global https.proxy 'socks5://127.0.0.1:1080'
# 取消代理
git config --global --unset http.proxy
git config --global --unset https.proxy
####
# 仅对github.com有效
git config --global http.https://github.com.proxy socks5://127.0.0.1:1080
# 取消代理
git config --global --unset http.https://github.com.proxy
--global
全局
对应的设置文件,~/.gitconfig
(全局)或项目文件夹中的.gitconfig
:
[http]
proxy = socks5://127.0.0.1:1080
[https]
proxy = socks5://127.0.0.1:1080
# 仅对github.com有效
[http "https://github.com"]
proxy = socks5://127.0.0.1:1080
测试发现:
"github.com"上的项目提示:Received invalid version in initial SOCKS5 response
"gist.github.com" 则提示:LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to gist.github.com:443故建议使用http协议
远程仓库链接格式类似:
git@github.com:cms-sw/cmssw.git
ssh://git@github.com/cms-sw/cmssw.git
实际调用 ssh
命令与服务器通信,需要配置 ssh 的 ProxyCommand
参数。
远程仓库链接格式类似:
git://github.com/cms-sw/cmssw.git
git 协议比较特殊,需要由 core.gitproxy
设置一个额外的 proxy 脚本,才能使用上 socks 代理。
- 编写 git-proxy 脚本,示例:
#!/bin/bash
## Proxy wrapper for git protocol (9418).
## 任意域名均有效
## git config --global core.gitproxy "proxy-command"
##
## 仅对example.com域名有效
## git config --global core.gitproxy '"proxy-command" for example.com'
exec connect -S 127.0.0.1:1080 "$@"
- 设置
core.gitproxy
终端命令:
# 设置
# 任意域名均有效
git config --global core.gitproxy "git-proxy"
# 仅对example.com域名有效
git config --global core.gitproxy '"git-proxy" for example.com'
# 取消
git config --global --unset core.gitproxy
对应的设置文件:
[core]
gitproxy = /path/to/git-proxy
[core]
gitproxy = "/path/to/git-proxy" for "example.com"
或者
export GIT_PROXY_COMMAND="/path/to/git-proxy"
git 三种协议的 Proxy 设置互不影响,互不冲突。
具体看man git-config
原理:export http_proxy、https_proxy 或 ALL_PROXY,那么wget、curl、git http/https协议等这类网络命令依据该设置进行 Proxy。
- 设置
http_proxy
、https_proxy
或ALL_PROXY
终端命令:
# 开启 Proxy
export http_proxy=socks5://127.0.0.1:1080
export https_proxy=socks5://127.0.0.1:1080
# 或者直接设置ALL_PROXY
export ALL_PROXY=socks5://127.0.0.1:1080
# 关闭 Proxy
unset http_proxy
unset https_proxy
unset ALL_PROXY
可以在终端运行,也可以写入shell配置文件
.bashrc
或者.zshrc
。也可以设置函数或者别名,便于开/关 Proxy。注意: 修改完
.bashrc
或者.zshrc
等 后重启终端或source
生效。可以通过
curl -i http://ip.cn
查看 IP 改变来测试是否生效
- 示例: 通过设置
alias
简写来简化操作
alias setproxy="export ALL_PROXY=socks5://127.0.0.1:1080"
alias unsetproxy="unset ALL_PROXY"
alias ip="curl -i http://ip.cn"