MacOS设置终端代理
前言
国内的开发者或多或少都会因为网络而烦恼,因为一些特殊原因有时候网络不好的时候需要使用代理才能完成对应的操作。原来我一直都是使用斐讯路由器然后刷了梅林的固件,直接在路由器层面设置转发代理,把一些国内网络不好的网站都走代理,这样的好处就是不用每台设备都设置ssr。
后来工作了,就没这么方便了,但是工作设备也比较固定嘛,开一下ssr也不费事。后来我发现一个怪事,同样是一个git地址,chrome访问正常可以zip下载,但是在终端里面一直503。后来查询资料才了解到,原来ssr的代理没有办法在终端生效,这样很多东西都非常麻烦,更新on myzsh看运气,在homebrew下载东西基本都挂,git克隆看天气,docer下载镜像等半天,使用国内各种为爱发电镜像源也是参差不齐,怎么用怎么不爽,非常影响开发。于是研究了一下,在这这记录下来。
查看是否生效
因为后面会用到,所以提前说一下,因为要确认是否代理成功,我们可以使用curl这个命令,然后去获取一些公益检测ip的网站,curl后网站会返回你访问它的这个公网ip,从而可以检测你是否代理成功。下面提供两个,因为有时候网站会挂掉(毕竟为爱发电网站)
curl cip.cc
curl ip.sb

没有代理成功(已打码)
为什么终端不会走代理
可以确定的是在mac下(其实win也是不会)使用ssr代理后不管是开全局还是按照规则在终端都不会生效,但是关于原因众说纷纭,大家都比较认可的理由是ssr代理类软件默认是代理socket5,而终端是http。真的是这样吗,我们来看看
我们设置规则代理,然后检查一下规则里面代理的协议,可以看到确实是socket5

可以看到确实代理的是socket5

此时自然是终端没代理成功
但是当我设置成全局代理,并且打开ssr的http代理设置以后,其实终端里面也不会成功,并没有什么*用


那到底是什么理由呢,其实我也不知道,但是我更同意stackExchange一位大佬给出的解释,他说mac的shell和系统设置是两套规则,shell是先于macOS诞生,在系统设置里面的设置代理在终端其实是不会生效的,系统也不会帮你去按照终端规则去设置一下。如果想要终端代理生效,需要单独对终端进行操作。

大佬的解释
我为什么会比较认同呢,是因为ssr本身其实就是开了一个本地的代理服务,你给它这个固定端口发过去的请求它才会进行代理转发然后返回,系统设置确实设置了网络的转发到这个端口,但是可能这个设置不会对终端生效,如果需要终端生效需要单独对终端设置,把终端里面的网络请求都转发到ssr启动的这个端口上。
设置终端走代理
终端设置完全真正的代理需要配合插件,比较麻烦,而且...主要是我自己设置代理都是一些临时性的需求,所以这里介绍一个简单的代理方法。
主流shell中都有好几个代理的系统变量,大多数的应用都遵循它,这里简单说三个,这里使用了export的命令,我在另外一篇文章里面说过,大家可以去翻一下,这个命令在当前的shell窗口中设置一个系统环境变量,这个变量只在当前shell窗口中生效,关闭再重新打开一个shell窗口以后这个系统环境将失效,如果想要一直代理可以把这个环境变量写入到启动文件中(例如~/.zshrc),启动文件介绍我也写过一篇文章,大家可以翻一下。
# 代理http
export http_proxy="socks5://127.0.0.1:1080"
# 代理https
export https_proxy="socks5://127.0.0.1:1080"
# 代理所有协议,其中包括ftp等
export ALL_PROXY="socks5://127.0.0.1:1080"
其中的原因大家可以浏览参考中的2和3,常见的软件命令都会使用这个系统环境变量,如果为空则直连如果有值则会转发到这个变量的代理上。其中git还提供应用变量设置,设置它可以单纯的让git每次都走你设置的代理,并且每次打开都会生效,因为这是git的软件全局设置
# 设置如下
git config --global http.proxy 'socks5://127.0.0.1:1080'
git config --global https.proxy 'socks5://127.0.0.1:1080'
# 取消如下
git unset http_proxy
git unset https_proxy
设置成功后,再进行检测,已经代理到线路上面的ip、

ladder就是上面那一堆命令的简化
结合alias做到灵活代理
如果你看过我原来写过的介绍linux快捷指令的文章,你可以结合其中的alias来完成更加灵活的代理,因为考虑到我们的使用场景,除了前面git可以单独配置应用的全局以后,我们好像在终端中不是那么需要始终的代理设置,确实代理的带宽和延迟上都没有直连好,但是有时候需要的工具或者框架服务器又在国外,不得不开代理。
虽然上面的命令可以解决这个问题,但是我很懒,然后每次执行上面一大堆命令,非常麻烦。使用alias设置一个快捷命令,然后每次输入就可以开启,用完关闭窗口下次再进来这个代理失效,只有需要的时候输入一下,不用输入一大串(往往这种命令,你都要打开记事本,然后复制粘贴)
alias ladder='export http_proxy=http://127.0.0.1:1087'

我这样配置已经够用了
参考
MacOS设置终端代理的更多相关文章
- 如何为MacOS X终端设置代理
http://codelife.me/blog/2012/09/02/how-to-set-proxy-for-terminal/ 本文介绍如何在MacOS X终端里使用代理访问网络,虽然只在Moun ...
- MacOS代理设置(桌面应用代理设置&Terminal代理设置)
MacOS代理分为桌面应用代理设置&Terminal代理设置,使用代理软件默认只会开启桌面应用代理,Terminal代理需要单独配置 桌面应用代理设置 Terminal查看桌面应用代理设置 ...
- 主机设置ss代理,虚拟机共享代理
代理的原理: 关于代理的具体的书面定义你百度谷歌可以知道.这里,我想简单通过一个例子,说明代理的原理: 假如,你在北京,但你女朋友在广州,你有东西要给你的女朋友,但是正好你这几天公司有事,所以你不能去 ...
- mac终端代理
终端代理,需要首先有自己的梯子,以下方式需要配合shadowsocks 终端FQ有很多好处,对于一个程序员来说,墙外有很多优秀的代码,走终端可以方便下载和使用- (编程思想强调复用,软件开发避免重复造 ...
- Linux下实现自动设置SSH代理
SSH的巨大价值体现在能够配置为代理服务器上.不像在Windows下每次还需要手动登录设置,Linux有很好的工具链能够实现自动设置SSH代理,就是expect和ssh的联合使用,再加上proxych ...
- 中小研发团队架构实践之生产环境诊断工具WinDbg 三分钟学会.NET微服务之Polly 使用.Net Core+IView+Vue集成上传图片功能 Fiddler原理~知多少? ABP框架(asp.net core 2.X+Vue)模板项目学习之路(一) C#程序中设置全局代理(Global Proxy) WCF 4.0 使用说明 如何在IIS上发布,并能正常访问
中小研发团队架构实践之生产环境诊断工具WinDbg 生产环境偶尔会出现一些异常问题,WinDbg或GDB是解决此类问题的利器.调试工具WinDbg如同医生的听诊器,是系统生病时做问题诊断的逆向分析工具 ...
- ubuntu下终端代理方法
起因 正常使用shadowsocks后只能在浏览器中访问google,而终端中却无法使用. 解决方法 ProxyChains是一个终端代理方案,使用比较简单. 在源里有这个软件,直接安装 sudo ...
- linux和mac 终端代理
概述 今天发现本地服务不能翻墙,查找了下原因,是因为小飞机在 linux 系统上即使开了全局代理还是不能代理终端的,需要开启终端代理才行.方法我记录下来,供以后开发时参考,相信对其他人也有用. 注意: ...
- termios, tcgetattr, tcsetattr, tcsendbreak, tcdrain, tcflush, tcflow, cfmakeraw, cfgetospeed, cfgetispeed, cfsetispeed, cfsetospeed - 获取和设置终端属性,行控制,获取和设置波特率
SYNOPSIS 总览 #include <termios.h> #include <unistd.h> int tcgetattr(int fd, struct termio ...
随机推荐
- Codeforces 258E - Little Elephant and Tree(根号暴力/线段树+标记永久化/主席树+标记永久化/普通线段树/可撤销线段树,hot tea)
Codeforces 题目传送门 & 洛谷题目传送门 yyq:"hot tea 不常有,做过了就不能再错过了" 似乎这是半年前某场 hb 模拟赛的 T2?当时 ycx.ym ...
- DTOJ 3999: 游戏
题目描述这个游戏是这样的,你有一个初始序列S ,你每次可以选择一段任意长度的连续区间,把他们+1 再膜k,给定目标序列,你需要尝试用尽量少的操作次数将初始序列变为目标序列.作为一名优秀的OIer,您认 ...
- pcm-pcie 解析
简介 pcm 全称为 Performance Counter Monitor,该项目是针对 intel 平台处理器的资源利用率进行监控的工具.在现代 Intel 处理器已经提供了监视处理器内部性能事件 ...
- python-django-类函数__str__ 函数
打印一个实例化对象时,打印的其实时一个对象的地址.而通过__str__()函数就可以帮助我们打印对象中具体的属性值,或者你想得到的东西. 因为再python中调用print()打印实例化对象时会调用_ ...
- 修改Ubuntu中locale转中文为英文
修改Ubuntu 的命令行为英文版 编辑 /etc/default/locale 文件 原来的配置为: LANG="zh_CN.UTF-8″ LANGUAGE="zh_CN:&q ...
- flask分页功能:基于flask-sqlalchemy和jinja2
先看源码: @app.route('/movie', methods=['GET', 'POST']) @app.route('/home', methods=['GET', 'POST']) @ap ...
- 单元测试在Unity中的应用
项目描述:简单演示单元测试在Unity中的应用 项目地址:UnityTestRunner_Tutorial - SouthBegonia 项目版本:2020.3.20f1 项目用法:打开就用,代码都放 ...
- 巩固javaweb的第三十天
显示用户输入信息 1 .代码 要想输出用户在上一个页面提交的信息,可以使用下面的代码: ${param.userid} ${param.username} ${param.userpass} ${pa ...
- ache
ache和pain可能没啥差别,头疼和头好痛都对.从词典来看,有backache, bellyache, earache, headache, heartache, moustache/mustach ...
- Netty之ByteBuf
本文内容主要参考<<Netty In Action>>,偏笔记向. 网络编程中,字节缓冲区是一个比较基本的组件.Java NIO提供了ByteBuffer,但是使用过的都知道B ...