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 ...
随机推荐
- 洛谷 P5902 [IOI2009]salesman(dp)
题面传送门 题意: 有 \(n\) 个展销会,每个展销会给出它的时间 \(t_i\),举办展销会的位置 \(l_i\),和参加这个展销会你能得到的收益 \(m_i\). 你现在在位置 \(s\),你可 ...
- pheatmap() 的热图制作
1.数据准备 2.画图 3.参数调整 (转自百迈克公众号) 关注下方公众号可获得更多精彩
- Mysql in子查询中加limit报错
Mysql in子查询中加limit报错 select id from aa where id in ( select id from bb limit 10 ); 改写成 SELECT id FRO ...
- Oracle-left join两表关联只取B表匹配到的第一条记录【over partition by(分组后对组内数据排序)】
背景: A表.B表两表关联,关联出来的结果里B表有不止一条,需求是只要B表结果中的某一条(按某字段排序) 经过百度,发现 row_number() over(partition by a order ...
- 质量体系建设之路---可视化的MockServer
一. 背景 福禄网络作为一家数字权益商品及服务提供商,覆盖了我们衣食住行的各种生活场景的权益内容,对接了如支付宝.京东.银行APP各种渠道,如何能够快速的响应渠道需求,提供稳定的接口服务,这就要求我们 ...
- 【题解】洛谷P1001 A+B Problem
第一篇博客,献给2020年的残夏. 静听8月的热情与安宁,在竞赛中的时光如白驹过隙. 也不惧未知的风雨,努力向着既往的通途. 题目地址 https://www.luogu.com.cn/problem ...
- Linux修改默认挂载NFS协议版本
系统版本:CentOS Linux release 7.4.1708 (Core) $ vi /etc/nfsmount.conf # # /etc/nfsmount.conf - see nfsmo ...
- 学习java的第二十八天
一.今日收获 1.java完全学习手册第三章算法的3.2排序,比较了跟c语言排序上的不同 2.观看哔哩哔哩上的教学视频 二.今日问题 1.快速排序法的运行调试多次 2.哔哩哔哩教学视频的一些术语不太理 ...
- day01 MySQL发展史
day01 MySQL发展史 今日内容概要 数据库演变史 软件开发架构 数据库本质 数据库中的重要概念 MySQL下载与安装 基本SQL语句 今日内容详细 数据库演变史 # 1.文件操作阶段 jaso ...
- day07 Linux配置修改
day07 Linux配置修改 昨日回顾 1.系统目录 /etc :系统配置目录 /bin-> /usr/bin :保存常用命令的目录 /root :超级管理员目录 /home :普通管理员目录 ...