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 ...
随机推荐
- 洛谷 P7155 [USACO20DEC] Spaceship P(dp)
Portal Yet another 1e9+7 Yet another 计数 dp Yet another 我做不出来的题 考虑合法的按键方式长啥样.假设我们依次按下了 \(p_1,p_2,\dot ...
- Mysql 预处理 PREPARE以及预处理的好处
Mysql 预处理 PREPARE以及预处理的好处 Mysql手册 预处理记载: 预制语句的SQL语法在以下情况下使用: · 在编代码前,您想要测试预制语句在您的应用程序中运行得如何.或者也许一个 ...
- ysoserial-CommonsBeanutils1的shiro无依赖链改造
ysoserial-CommonsBeanutils1的shiro无依赖链改造 一.CB1利用链分析 此条利用链需要配合Commons-Beanutils组件来进行利用,在shiro中是自带此组件的. ...
- Shell 输出第五行的内容
目录 Shell 输出第五行的内容 题目 题解-awk 题解-sed Shell 输出第五行的内容 题目 写一个 bash脚本以输出一个文本文件 nowcoder.txt 中第5行的内容. 示例: 假 ...
- CSS相关,手画三角形,正方形,扇形
三角形 实现一个三角形 <!DOCTYPE html> <html> <head> <title>三角形</title> <style ...
- deque、queue和stack深度探索(上)
deque是可双端扩展的双端队列,蓝色部分就是它的迭代器类,拥有四个指针,第一个cur用来指向当前元素,first指向当前buffer头部,last指向当前buffer尾部,node指向map自己当前 ...
- LeetCode1579题——圆圈中最后剩下的数字
1.题目描述:0,1,,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字.求出这个圆圈里剩下的最后一个数字.例如,0.1.2.3.4这5个数字组成一个圆圈,从数字0开始每次删 ...
- JavaIO——转换流、字符编码
1.转换流 转换流是将字节流变成字符流的流. OutputStreamWriter:将字节输出流转换成字符输出流. public class OutputStreamWriter extends Wr ...
- 【Service】【Database】【MySQL】基础
1. 概念 1.1. 作者:Unireg 1.2. MySQL AB --> MySQL Solaris:二进制版本: 1.3. 官方网站: MySQL: www.mysql.com Maria ...
- MyBatis中关于大于,小于写法
第一种写法(1): 原符号 < <= > >= & ' " 替换符号 < <= > >= & ' " ...