让 SSH 走代理连接服务器

很多网络运维、或者站长需要通过 ssh 来管理服务器、vps,如果不凑巧,你和服务器之间相隔了一堵 GFW,那么由于 GFW 会分析 ssh 数据包,结果就是导致稍微慢一点的网络就会让命令卡一分钟。

GFW 现在完全有能力分析 ssh 流量特征,以判断你是在真的使用 ssh 配置服务器,还是使用它作为代理来浏览网页。

如果有什么好的办法让ssh像浏览器那样指定翻墙就好了。

事实上,还真有。

ProxyCommand

这是 ssh 自带的一条命令,它能够允许ssh通过一个现有的ssh会话来发送命令。简单来说,就是能够允许 ssh via ssh。

——那么,我们需要两个vps咯?

其实不然,我们还要使用到下面的一个工具:

Corkscrew

它让上文中提到的 ProxyCommand 以为一个 Http 代理是 ssh,这样,就实现了 ssh via http代理。

对于 macOS 来说,安装也很简单,直接使用 Brew 安装即可:

brew install corkscrew

总之,你还需要一个 http 代理,目前来说,几乎所有的 shadowsocks 客户端以及其他各种代理客户端都会提供 http 和 https 代理——这里作为我本地环境,使用的是 surge, 它的本地默认 http 和 https 端口是 6152

所以,我们编辑文件~/.ssh/config (如果没有就创建一个新的)里边加入新内容:

Host *
        ProxyCommand corkscrew 127.0.0.1 6152 %h %p

这样就默认对所有的 ssh 回话启动这条命令了——当然,有surge作为后端自动选择线路,所以对所有会话都启用也无所谓了。

怎么使用智能选择路径?对我来说目前我已经在使用白名单了。

这下,再如同往常一样使用ssh命令登录服务器吧,记得登录之后再退出再登录,这样你就能看到上一次登录的 IP 地址了,它应该已经是你前置代理的出口地址了 :)

什么?你说 VPN ? 别搞笑了,gfw打vpn准确率也差不到哪里去。

 

“让 SSH 走代理连接服务器”的3个回复

  1. 我发现一个很奇怪的事情,国内现在可以直连google storage了嘛?wget竟然能下载回来,上午一台国内服务器还超时来着…下午就好了(つд⊂)

发表评论

电子邮件地址不会被公开。 必填项已用*标注