以服务于中国广大创业者为己任,立志于做最好的创业网站。

标签云创业博客联系我们

导航菜单

ssh 通过代理连接服务器

老规矩,先说结论:

#用于,未经测试$ssh-="nc--%h%p"user@

或者:

#如果代理服务器需要认证,可以使用nc的升级版ncat指定代理服务器的用户名和密码#用于。在上使用ncat无法连接,原因不明$ssh-="ncat--proxy-typehttp/socks4/socks5--proxyproxy.net:port--proxy-authproxyuser:proxypwd%h%p"user@server.net

由于不明原因,在macOS上,Ncat某版本升级后,上述方式不再生效,起码7.91版本在macOS10.15.7上是不行的。但Linux上没问题。所以增加个socat的替补方案:

#主机:user@server.net#代理:http://proxyuser:proxypwd@proxy.net:30808$ssh-o\ProxyCommand='socat-proxy:proxy.net:%h:%p,proxyport=30808,proxyauth=proxyuser:proxypwd'\user@server.net

Scout本身很强大,但对代理的支持这部分貌似差一些,只支持SOCKSv4和HTTPProxy,不支持SOCKS5。详情参考《socat初窥门径》。

一、背景

有些时候,由于网络限制等原因,不能直接连通过SSH连到指定服务器,需要经过代理进行连接。例如如下场景:

客户机:client.net

代理服务器:proxy.net,安装代理服务器软件,通过1080端口,提供Socket5代理服务

目标服务器:server.net,在默认22端口,提供SSH服务

其中,

client.net

不能直接访问server.net

client.net

可以访问proxy.net

proxy.net

可以访问server.net

二、解决方案

使用SSH的ProxyCommand选项,配合nc/Ncat命令,实现client.net通过代理proxy.net,以SSH访问server.net。

1、连接代理工具

(1)nc

macOS上常用这种方案。但是nc不支持需要认证的代理。

常用参数:

-X

指定代理协议

4

SOCKSv.4

5

SOCKSv.5(默认)

connect

HTTPSproxy