SSH 通过代理连接服务器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSH 通过代理连接服务器相关的知识,希望对你有一定的参考价值。

参考技术A 老规矩,先说结论:

或者:

注意:由于 macOS 版 Ncat 的 7.90 和 7.91 版本的 bug,上述方式不再生效。起码 7.91 版本在 macOS 10.15.7 上是不行的。此问题在 7.92 版本中已经解决。

具体原因参见: https://nmap.org/changelog.html

但 Linux 上没问题。所以增加个 socat 的替补方案:

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

有些时候,由于网络限制等原因,不能直接连通过 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) nc

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

常用参数:

(2) Ncat

Ncat 在 macOS 上通过代理连接时会出现连接断开的情况。

常用参数:

以 nc 为例,如使用 Ncat 可以自行替换。

默认为 Socket5 代理,这时可以省略 -X 参数
或者采用另一种写法:

SSH 配置文件位置:

增加如下两行内容:以 nc 为例,如使用 Ncat 可以自行替换。

使用配置文件之后,就不需要在命令行中进行代理配置了。

对于大部分情况,都可以直接使用 nc 或者 Ncat 解决。但对于一些复杂情况,也可以通过其它方案完成。如在 macOS 上想通过需要认证的代理连接,用 nc 不支持代理认证, Ncat 又有些问题。

对于代理类型的问题,可以通过 Brook 来进行类型转换。

1、 corkscrew

只支持 HTTP 代理

如需要访问带认证的代理服务器:

~/.ssh/myauth 的内容:

2、 proxytunnel

只支持 HTTP 代理

命令行里只填用户名,会提示输入密码,或者通过环境变量传入。

(完)

SSH通过代理连接

从目前网上的资料来看,通过代理来连接ssh有2种方式:

先来介绍一下Corkscrew

 1.解压并编译安装:

https://pkgs.org/download/corkscrew  下载deb软件包地址

安装deb软件包 dpkg -i xxx.deb

wget http://www.agroman.net/corkscrew/corkscrew-2.0.tar.gztar -xzvf corkscrew-2.0.tar.gz
cd corkscrew
./configure
make install

2.添加配置到ssh用户目录,/root/.ssh/config (编辑该配置文件)写入:

Host *
ProxyCommand corkscrew http-proxy.example.com 8080 %h %p

注意http-proxy.example.com为http代理地址(例如proxy.cmcc或者ip)根据实际更改,后面的8080为http代理端口。

如果HTTP代理需要用户名/密码验证,则需要写上代理验证文件。假设代理服务器是192.168.0.1:808。用户名密码是name:pass,打算存放在~/.ssh/proxyauth。则有

ProxyCommand corkscrew 192.168.0.1 808 %h %p ~/.ssh/proxyauth

新建/roo/.ssh/proxyauth文件,写上:

name:pass

接下来就可以直接连接了:

ssh root@112.33.9.154  -p 22

在第二次登录时就可看到上次登录ip,从而判断是否是通过代理连接了。

 

参考:

http://www.cnblogs.com/JoJosBizarreAdventure/p/5892355.html

http://bolg.malu.me/html/2011/1809.html

http://blog.csdn.net/asx20042005/article/details/7041294

 

以上是关于SSH 通过代理连接服务器的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot Resttemplate通过ssh隧道的动态代理设置连接不识别远程DNS

SSH实现多跳代理

利用ssh反向代理以及autossh实现从外网连接内网服务器

MobaXterm 代理开瓶器

如何直接通过跳板机ssh到服务器

Github SSH 通过研究所代理,端口 22 和端口 443 被阻止