git, ruby, ffmpeg 等常见 CLI 软件 HTTP & SOCKS5 代理方式全解,让你不再忍受于低速与断线的困扰

通常 CLI(type error) 软件 没有明显的 SOCKS5 代理设置,需要手动查阅软件的使用手册,不过可能 SOCKS5 代理功能在一些软件中不属于常用功能, 所以手册中也不一定会提到代理设置的方法。

下面出现的 SOCKS5 端口默认 1080,http 为 2080,https 与 SOCKS4 代理少见,所以就不在正文里提了。

如果没有特殊说明,通常下面提到的方法都是全平台(Windows, Linux, macOS)支持的。

home 文件夹 #

因为习惯原因 ~/ 文件夹指 *nix 系统中的 $HOME 文件夹,1软件的设置常会保存在这个地方。 引申到 Windows 下指 %USERPROFILE%(%HOMEDRIVE%%HOMEPATH%) 这个地方,也就是 C:\Users\你的用户名 这个地方。

Windows 自带代理设置 #

系统图形化代理设置 #

Windows 10 中,打开 设置,进入 网络和 Internet 选项就能看到 代理 选项卡。

这里可以设置 PAC(自动设置代理(Proxy auto-config)) 或者手动设置代理。

不过可用性不高,因为 PAC list 总是赶不上变化,手动设置代理又不够灵活,可能代理了本不需要代理的软件,适配的软件并不一目了然。

这个设置在多数情况都是使用其他软件一键设置,作为临时代理支持的软件的方法。

已知可以获得这个代理设置的软件:

  • Internet Explorer*
  • Microsoft Edge
  • Google Chrome* 以及各种 Chromium*
  • Mozilla Firefox
  • Opera Opera*

* 注意,星号标记的软件默认情况下(不使用扩展)在 Windows 下仅支持系统中的代理设置。

环境变量代理设置 #

Windows 10 #

Windows 10 中,右键桌面上的此电脑,进入 属性,应该就能看到 高级系统设置,然后就出现 环境变量 的入口。

关于使用大写 HTTP_PROXY 或小写 http_proxy 的区别,PHPor 通过实验得出的结论是小写使用得广泛。2

系统变量 中增加两个变量,分别是 http_proxyhttps_proxy,然后都填上 http 代理地址。

http_proxy      http://127.0.0.1:2080
https_proxy     http://127.0.0.1:2080

如果有用户名与密码则这么写:
http_proxy      http://[用户名]:[密码]@127.0.0.1:2080
https_proxy     http://[用户名]:[密码]@127.0.0.1:2080

也可以使用临时环境变量,在 CMD 里输入下面的命令:

set http_proxy=http://127.0.0.1:2080
set https_proxy=http://127.0.0.1:2080

PowerShell 里需要这么写:

$env:http_proxy = "http://127.0.0.1:2080"
$env:https_proxy = "http://127.0.0.1:2080"

这样能够代理基于 TCP 与 UDP 通信的部分 CLI 软件,不过 ICMP 无法被代理。

已知可以获得这个代理设置的软件:

  • pip
  • wegt
  • ffmpeg
  • bundle

Linux #

环境变量能使大部分 Linux 软件成功使用上代理。

git #

通常对 git 进行代理只需要修改 ~/.gitconfig 这个文件。3

用户名和密码身份验证可以使用常用写法 proxy = socks5://[用户名]:[密码]@[代理服务器地址]:[端口] 搞定,除了 SOCKS5 也能填入 http 代理地址。4

仅对 GitHub 代理演示代码:

[http "https://github.com"]
    proxy = socks5://127.0.0.1:1080

全局代理演示代码:

[http]
    proxy = socks5://127.0.0.1:1080

gem #

gem 可以直接使用 --http-proxy 参数进行代理,如下面的命令。5

gem install --http-proxy http://127.0.0.1:2080 $gem_name

gem 默认使用代理 #

Windows 下找到文件 gem.cmd Linux 下找到 gem,该文件一般在 ruby 的安装目录下,可以使用搜索软件 Everything 或者系统自带的 CLI 软件 where(Windows) which(Linux) 进行查找。

用纯文本编辑器打开 gem(.cmd),然后找到最后排的 begin 这行,在这行之后增加一行代码:6

args += ['--http-proxy','http://127.0.0.1:2080']

保存之后就大功告成,之后使用 gem 都不再需要额外输入代理命令了。

Linux #

编辑文件 ~./gemrc 像下面这样:7

---
:benchmark: false
:verbose: true
:sources:
- http://rubygems.org/
- http://gems.rubyforge.org
:backtrace: false
:bulk_threshold: 1000
:update_sources: true
gem: --http-proxy=http://USERNAME:PASSWORD@ADDRESS:PORT

youtube-dl #

Use the specified HTTP/HTTPS/SOCKS proxy. To enable SOCKS proxy, specify a proper scheme. For example socks5://127.0.0.1:1080/. Pass in an empty string (–proxy “”) for direct connection

youtube-dl --proxy "socks5://127.0.0.1:1080" {YouTube URL}

如上所示,使用 --proxy 空格 代理地址字符串,作为参数就能实现代理,支持 HTTP/HTTPS/SOCKS 代理。

ssh #

目前我还没有成功让 ssh 使用代理在 Windows 平台,相关资料中说与 ProxyCommand 这个参数有关。

Linux 用户可以参考这篇指南: 让你的SSH通过HTTP代理或者SOCKS5代理 - 神田长雨

详细设置方法待续

如果你需要测试是否让 ssh 通过了代理,可以使用防火墙拦截 ssh 的流量,然后链接 GitHub 给的测试服务器:

ssh -T git@github.com

接下来的软件就不是 CLI 软件了,不过因为代理设置可能不明显,所以也写进来。

electron #

electron 软件可以在启动项中加入 --proxy-server=address:port 以实现代理,8例如:

Fluent Reader.exe --proxy-server=socks5://127.0.0.1:1080

注意: electron 软件不支持用户名和密码身份验证

脚注 #