在 Mac 上用一个命令使用 SSH 做代理科学上网

作为一个开发人员,翻墙是必备本领。
一些常用的参考代码和开发文档官方网站,要么很慢,要么被墙,你懂的,这需要科学上网。
你只要有一个墙外的 Linux 服务器,就能在 Mac 上用一个命令使用 ssh 做代理科学上网。

创建 SSH 秘钥

先创建名称为 pxy_rsa 的本地秘钥(你也可以使用已有的秘钥,怎样创建 ssh 秘钥如果不会自行网上搜索)。

服务器端添加账号

服务器端 ssh 禁用密码登录,配置 key 登录,
添加用户名为 pxy 的账号,只允许作为代理,不允许做其它操作。

使用 root 权限操作,执行以下命令

1
2
3
4
5
6
7
8
9
10
# 创建用户
useradd pxy -g nobody -s /bin/false -m
mkdir /home/pxy/.ssh
cd /home/pxy/.ssh

# 打开授权公钥保存文件
vim authorized_keys
# 然后输入客户端shh公钥
# 修改权限
chown pxy:nobody -R /home/pxy

Mac 本地代理设置

设置本地 ssh 连接

vim ~/.ssh/config 打开 SSH 配置文件,添加内容:

1
2
3
4
5
Host          pxy
HostName 47.240.48.52
Port 22
User pxy
IdentityFile ~/.ssh/pxy_rsa

这样,客户端执行命令 ssh pxy -D 1080 -N 即开启代理通道,在本地就可以使用 localhost:1080 做代理了。
但是,启动代理后,每次还要去系统设置里开启网络连接的 sock5 代理,完了又要关闭,麻烦死了。下面教你一个命令搞定。

创建启动代理的脚本

~/proxy 文件输入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/bin/sh
echo 'sudo 开启代理 ...'
sudo networksetup -setsocksfirewallproxy "Wi-Fi" 127.0.0.1 1080 # 设置 “Wi-Fi” 网络链接开启 SOCKS5 代理,
sudo networksetup -setsocksfirewallproxystate "Wi-Fi" on

# ssh 只支持 socks5 代理,如果你用的是其他代理服务器,可用一下命令启用http(s)代理
#sudo networksetup -setwebproxy "Wi-Fi" 127.0.0.1 8000 # HTTP proxy
#sudo networksetup -setsecurewebproxy "Wi-Fi" 127.0.0.1 4430 # HTTPS proxy
#sudo networksetup -setwebproxystate "Wi-Fi" on
#sudo networksetup -setsecurewebproxystate "Wi-Fi" on

# 先在 ~/.bash_profile 中设置如下 alias:
#alias proxy_cli_on='export all_proxy=socks5://127.0.0.1:1080'
#alias proxy_cli_off='unset all_proxy'

echo '已启动代理,端口: 1080'
echo '命令行用 proxy_cli_on/proxy_cli_off 命令来启用/停用命令行窗口的代理。'
echo '使用 Ctrl+C 关闭代理\n'

# 启动 SSH 代理进程
ssh pxy -D 1080 -N

# 关闭代理进程后执行
echo '\n\n正在停用“Wi-Fi”代理 ...'
sudo networksetup -setsocksfirewallproxystate "Wi-Fi" off
#sudo networksetup -setwebproxystate "Wi-Fi" off
#sudo networksetup -setsecurewebproxystate "Wi-Fi" off

echo 'done.'

# 如果不是通过 Ctrl+C 关闭代理,可再启动代理后用 Ctrl+C 关闭代理

其中 “Wi-Fi” 为设置代理的网络连接名,如果你用的是台式机,可用命令 sudo networksetup -listallnetworkservices 查看当前使用的网络连接名,把“Wi-Fi”改为你的网络连接名就可以了。

添加自定义命令

把一下命令加入到 ~/.bash_profile 文件中

1
2
3
4
#proxy
alias proxy='~/proxy'
alias proxy_cli_on='export all_proxy=socks5://127.0.0.1:1080'
alias proxy_cli_off='unset all_proxy'

配置完成。

  • 启动代理:打开一个新的终端窗口,执行命令 proxy,这样一个命令就可以启动代理了。用浏览器打开网址 ipinfo.io 就能看到你当前的公网 IP 了。
  • 启动命令行代理: proxy 命令是不启动命令行代理的,如果想在命令行启用代理,还需要执行前面自定义的 proxy_cli_on 命令,然后在当前终端使用命令 curl ipinfo.io 就可以看到你的公网IP了。

有人喜欢修改 ~/.bash_profile 后,使用 source ~/.bash_profile 命令加载后执行命令,我比较懒,喜欢 Ctrl+N 在新窗口执行命令。

在 Mac 上用一个命令使用 SSH 做代理科学上网

https://coderpan.com/tools/mac-ssh-socks5.html

作者

CoderPan

发布于

2023-06-15

更新于

2024-05-08

许可协议

评论