Mac 终端代理 --- proxychains

Author Avatar
Crown 10月 09, 2017
  • 在其它设备中阅读本文章

最近重装了一次系统, 在这之前我一直在使用 zsh , 但自己又懒得去进行各种配置, 最后选择了自己一直暗中观察许久的 fish shell, 虽然它跟 zsh 相比, 不兼容bash是它最大的弊端, 但跟其开箱即用以及各种人性化的初始设置相比, 我最终还是选择了fish, 但在终端使用代理这一块, 由于它不兼容 bash 的原因, 不能使用下面命令来配合shadowsocks进行终端代理开关

alias setproxy="export ALL_PROXY=socks5://127.0.0.1:1080"
alias unsetproxy="unset ALL_PROXY"

要是再在fish的配置文件中再单独用它默认的语法再去写一遍相关命令, 例如set -x http_proxy socks5://127.0.0.1:1080之类相关命令又感觉这是一种特别蠢的做法, 我希望的是只用维护一处地方, 就可以在bash,zsh,fish等命令行中全部使用, 这个时候我能想到的就只有用一些第三方命令工具来完成这个需求了 — proxychains.

废话不多说, 直接进入配置环节.

使用 brew 安装

brew install proxychains-ng

编辑proxychains配置文件

当你用brew安装后, 其默认配置文件存放在/usr/local/etc/proxychains.conf这里, 我们直接编辑该文件最后一行, 将

socks4 127.0.0.1 9095

改成

socks5 127.0.0.1 1086

即可, 这里根据你自己shadowsocks配置的端口进行相关设置即可, 如果这里你还留心观察了下配置文件中的介绍, 你会发现, 这个是可以自动根据你不同命令来确定使用不同端口以及协议来进行代理的, 而这里我本地shadowsocks还开启了http代理,所以我最后的配置是

socks5 127.0.0.1 1086
http   127.0.0.1 1087

如何使用

在你需要进行代理的命令前加入proxychains4即可, 例如我们本来要执行

npm i -g npm

改成如下即可

proxychains4 npm i -g npm

这里我们还可以配合alias来进行简化我们需要执行的命令, 例如我就是在~/.bashrc中加上了这一段

alias proxy="proxychains4"

这样我们在source ~/.bashrc之后就可以在不同的shell脚本中执行特定命令的终端代理, 例如proxy npm i -g npm

Tips

如果你在/usr/local/etc/proxychains.conf中并没有找到该文件, 也许是你的一些配置导致安装位置不同, 这时你这直接执行proxychains4 XXX命令后, 他会提示你配置文件存放在哪, 例如

➤ proxychains4 nrm test npm
[proxychains] config file found: /usr/local/etc/proxychains.conf
[proxychains] preloading /usr/local/Cellar/proxychains-ng/4.12_1/lib/libproxychains4.dylib

* npm ---- 149ms

2017.11.8 号更新

把系统升级到10.13后,各种奇奇怪怪的问题都跑出来了,例如我这里要说的终端代理的问题,如果你恰好遇到了我的这个问题,可以来看看我的解决问题的方案.当然,如果你有更好的方法,欢迎来一起探讨…

我遇到的问题是终端下http,https的流量不能走通设置好的sock5代理端口,开启shadowsocksx-nghttp代理,然后在你的.bashrc中设置httphttps的代理端口

// 1087是我开启的http端口
export http_proxy="http://127.0.0.1:1087"
export https_proxy="http://127.0.0.1:1087"

source ~/.bahsrc之后, 你的终端命令默认就会去使用http端口,当一些需要使用到sock5协议的命令时,在其前面加上我们之前设置好的proxy xxx即可.


随着我自己个人的技术水平的提高,我也会尽最大力量去原创一些有价值有内容的文章出来。在此期间我的文章会同步更新在以下地方,欢迎大家在自己长逛的网站中关注或者star我的Github来了解我的最新消息!!!推荐大家收藏关注我的博客网站crowncj.com,因为我的最新更改与文章只会在这里更新,其他地方的文章可能会存在更新不及时或者忘记更新等问题。

未经允许,不准转载