0%

让SSH用上代理

SSH连境外的机器如果不走代理的话晚上可能会卡出翔(GFW出来挨打)。我的谷歌云的小主机向大陆的流量收费挺贵的,走代理的话还能省一点钱。

下面的操作默认你有一个支持socks5的代理软件。

Linux

Linux下比较简单,不需要额外安装任何软件,参考了这篇博客。这篇博客介绍了怎么全局代理所有服务器,而不需要每次设置。

ssh -o ProxyCommand="nc -X 5 -x 127.0.0.1:1080 %h %p" root@ip

上面-X 5是指定socks5协议,-x指定sock5 代理的地址,根据自己的软件改。

Windows

Windows想让ssh走代理有一点麻烦,不自带nc软件,去网上找Windows的第三方版本会少实现一些功能,没有办法用。

所以去下载netcat。下完之后安装,如果用火绒记得把安装路径加进保护区,不然就疯狂报警。

netcat的参数和nc并不同,所以连接命令要稍微改下,参考这份回答

ssh -o ProxyCommand="ncat --proxy-type socks5 --proxy 127.0.0.1:1080 %h %p" root@ip

SSH Config

用户文件夹下的.ssh文件中加入config文件可以保存服务器信息,便于快速连接。

写法如下:

1
2
3
4
Host ubuntu 
HostName ip.ip.ip.ip
ProxyCommand ncat --proxy-type socks5 --proxy 127.0.0.1:1080 %h %p
User root

然后命令行输入ssh ubuntu就可以快速连接。

上面的ProxyCommand可选,如果是Linux就要换成nc的命令。

如果不想自己手写config可以用VS Code的ssh拓展,写好ssh命令它可以帮你写入config文件。

参考

  1. Using the SSH Config File
  2. Deepzz: SSH Config 那些你所知道和不知道的事

验证代理是否成功

登录成功后,输入 echo $SSH_CLIENT 检测IP是否为代理服务器IP。