Linux下终端代理设置

在无法翻越的伟大的墙面前,很多时候我们需要用到梯子去看外面的世界,浏览器爬梯子比较简单,而相对于原始的终端面对先进的梯子倒是有点不知所措。

以前如果要在终端里面爬梯子,我一般是生成一个全局的代理规则,把代理直接加到网络出入口上,这样不管是浏览器还是终端,实际可以直接认为伟大的墙已经隐身,直接无感的透传。当然还有一种更加无感的方式,那就是将梯子架在路由上,家里的路由接管所有网络,所以路由上搞个梯子,那么所有连到路由上的设备就都可以访问墙外的风景了。

不过最近在公司里面用的时候,因为策略和权限的问题,我没有办法去搞这些全局的梯子,所以只能用其他一些让终端走代理的方法。

最为简单直接的方法就是定义http_proxy环境变量,这种方式最为简单直接,但是只对当前终端有效,当终端退出立即失效。

# Normal
export http_proxy=http://proxyAddress:port
# SS proxy
export ALL_PROXY=socks5://127.0.0.1:1080

当然你可以把上面的代码定义在bashrc或者.zshrc里面,这样当每次打开终端都可以直接配置好代理,需要说明的是默认情况下这种方式对于sudo命令是无效的,因为sudo命令相当于是root用户执行命令,而上面配置的环境变量是针对当前用户的,所以切换到root用户之后这些环境变量失效,代理的配置也就无效了。不过,我们可以通过visudo修改配置,让系统运行sudo命令的时候保留代理环境变量:

# run visudo to open configuration file
# find Defaults env_reset
Defaults env_reset
# add following exceptions
Defaults env_keep = "http_proxy ftp_proxy"

这样sudo命令也可以走代理了。

另外,如果代理需要用户名和密码的认证,我们也可以将用户名及密码信息一起写到环境变量里面,比如:

http_proxy=http://userName:password@proxyAddress:port

最后感谢IT给我搞了一个公用用户的账号和密码,这样我就不用担心我的流量太多或者连入公司的设备太多了,因为反正也不是我名字下面的呀,哈哈。


本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。

发表新评论