2023年7月20日发(作者:)
SSH通过代理连接服务器⽼规矩,先说结论:# ⽤于 macOS,FreeBSD 未经测试$ ssh -o ProxyCommand="nc -X connect/4/5 -x :port %h %p" user@或者:# 如果代理服务器需要认证,可以使⽤ nc 的升级版 ncat 指定代理服务器的⽤户名和密码$ ssh -o ProxyCommand="ncat --proxy-type http/socks4/socks5 --proxy :port --proxy-auth proxyuser:proxypwd %h %p" user@注意:由于 macOS 版
Ncat 的 7.90 和 7.91 版本的 bug,上述⽅式不再⽣效。起码 7.91 版本在 macOS 10.15.7 上是不⾏的。此问题在7.92 版本中已经解决。[Ncat][GH#2149] Fixed a bug in proxy connect mode which would close the connection as soon as it wasopened in Nmap 7.90 and 7.91.但 Linux 上没问题。所以增加个
socat 的替补⽅案:# 主机:user@# 代理:proxyuser:proxypwd@:30808$ ssh -o ProxyCommand='socat - proxy::%h:%p,proxyport=your_port,proxyauth=proxyuser:proxypwd' user@ut 本⾝很强⼤,但对代理的⽀持这部分貌似差⼀些,只⽀持 SOCKSv4 和 HTTP Proxy,不⽀持 SOCKS5。详情参考《socat 初窥门径》。⼀、背景有些时候,由于⽹络限制等原因,不能直接连通过 SSH 连到指定服务器,需要经过代理进⾏连接。例如如下场景:客户机:代理服务器:,安装代理服务器软件,通过
1080 端⼝,提供 Socket5 代理服务⽬标服务器:,在默认
22 端⼝,提供 SSH 服务其中, 不能直接访问
可以访问
可以访问
⼆、解决⽅案使⽤
SSH 的
ProxyCommand 选项,配合
nc/Ncat 命令,实现
通过代理
,以
SSH 访问
。1、连接代理⼯具(1)ncmacOS 上常⽤这种⽅案。但是
nc 不⽀持需要认证的代理。常⽤参数:-X 指定代理协议4 SOCKS v.45 SOCKS v.5(默认)connect HTTPS proxy-x 代理地址[:端⼝]如果没有指定端⼝,采⽤协议常⽤端⼝,如:SOCKETS 使⽤ 1080HTTPS 使⽤ 3128(2)NcatNcat 在 macOS 上通过代理连接时会出现连接断开的情况。常⽤参数:--proxy-type 指定代理协议socks4 SOCKS v4socks5 SOCKS v5http HTTP proxy(默认)--proxy 代理地址[:端⼝]如果没有指定端⼝,采⽤协议常⽤端⼝,如:SOCKETS 使⽤ 1080HTTPS 使⽤ 3128--proxy-auth 指定访问代理的账号、密码对于
--proxy-type http/socks5 形式为
--proxy-auth proxyuser:proxypwd对于
--proxy-type socks4 形式为
--proxy-auth proxyuser2、SSH 命令⾏以
nc 为例,如使⽤
Ncat 可以⾃⾏替换。$ ssh -o ProxyCommand="nc -X 5 -x :1080 %h %p" user@默认为 Socket5 代理,这时可以省略
-X 参数或者采⽤另⼀种写法:$ ssh -o "ProxyCommand nc -X 5 -x :1080 %h %p" user@3、使⽤
SSH 配置⽂件SSH 配置⽂件位置:~/.ssh/config增加如下两⾏内容:以
nc 为例,如使⽤
Ncat 可以⾃⾏替换。Host * ProxyCommand nc -X 5 -x :1080 %h %p使⽤配置⽂件之后,就不需要在命令⾏中进⾏代理配置了。三、其他解决⽅案对于⼤部分情况,都可以直接使⽤
nc 或者
Ncat 解决。但对于⼀些复杂情况,也可以通过其它⽅案完成。如在 macOS 上想通过需要认证的代理连接,⽤
nc 不⽀持代理认证,Ncat ⼜有些问题。对于代理类型的问题,可以通过 Brook 来进⾏类型转换。1、corkscrew只⽀持 HTTP 代理$ ssh -o ProxyCommand='corkscrew 8888 %h %p' user@如需要访问带认证的代理服务器:$ ssh -o ProxyCommand='corkscrew 8888 %h %p ~/.ssh/myauth' user@~/.ssh/myauth 的内容:username:password2、proxytunnel只⽀持 HTTP 代理$ ssh -o ProxyCommand='proxytunnel -p :8888 -P username -d %h:%p' user@命令⾏⾥只填⽤户名,会提⽰输⼊密码,或者通过环境变量传⼊。四、参考资料《SSH 通过代理连接服务器》《透过代理连接 SSH》SSH ProxyCommand(完)
发布者:admin,转转请注明出处:http://www.yc00.com/web/1689813032a288273.html
评论列表(0条)