如何通过Bash shell设置代理?

14

我通过 系统偏好设置 -> 网络 -> 高级 -> 代理 在 Mac 上设置了一个代理。

是否可以通过 Bash Shell 编程以编程方式执行相同的操作?

3个回答

33

你可以将以下内容放置在你的 .profile.bash_profile 中,或者在命令行手动运行:

export http_proxy=http://proxy.server.com:@aproxy:portnumber
export https_proxy=https://proxy.server.com:@aproxy:portnumber

不使用代理来处理本地连接也很常见

export no_proxy=localhost,127.0.0.0/8,*.local

1
有些代理服务器即使传出请求是 https 请求,但它们本身并不接受 https 请求。因此,您可能需要使用 export https_proxy=http://proxy.server.com:@aproxy:portnumber 来代替!(请注意缺少的 s!) - einjohn

13

是的,可以使用networksetup命令。针对设置不同类型的代理(例如-setwebproxy-setsocksfirewallproxy等),有单独的选项,并且您需要知道主网络“服务”的名称(例如Ethernet,Airport...基本上是Network首选项窗格侧栏中列出的名称)。这是一个例子:

sudo networksetup -setwebproxy "Ethernet" myproxy.example.com 8000
如果您需要找出服务名称,请使用 networksetup -listnetworkserviceordernetworksetup -listallnetworkservices,然后解析列表以获取所需服务的名称。

6
我使用这个脚本通过我的ssh服务器进行代理(不是web代理)。
#!/bin/bash
disable_proxy(){
    sudo networksetup -setsocksfirewallproxystate Wi-Fi off
    sudo networksetup -setsocksfirewallproxystate Ethernet off
    echo "SOCKS proxy disabled."
}
trap disable_proxy INT

sudo networksetup -setsocksfirewallproxy Wi-Fi 127.0.0.1 9999
sudo networksetup -setsocksfirewallproxy Ethernet 127.0.0.1 9999
sudo networksetup -setsocksfirewallproxystate Wi-Fi on
sudo networksetup -setsocksfirewallproxystate Ethernet on
echo "SOCKS proxy enabled."
echo "Tunneling..."
ssh -ND 9999 000.000.000.000 -p 00000

000.000.000.000 更改为您自己服务器的IP地址,将 00000 更改为您自己的端口号,然后您就可以重新使用它连接您自己的ssh服务器。您可以将此脚本保存在名为proxy的主目录中。

使用./proxy启动它(输入您的密码),使用CTRL+C停止隧道。

如果忘记停止隧道,并且第二天您在想为什么您的互联网连接中断,请再次启动并使用CTRL+C停止隧道。

如果出现“broken pipe”错误,请再次启动./proxy


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接