如何通过ssh连接一台无法直接访问的机器

背景

之前的文章讲过,我的很多服务是部署在百度云BCH上的。但是实际上呢,为了方便日常运维方便,我也有一些vps机器,比如一台中控服务器是在国内大陆的,还有一些特殊用途的机器在香港、美国等地(别问是干嘛的,就图机器便宜)。


这不是重点,重点是部分机器,动不动就连不上,ping也ping不通,ssh也连不上,也就是说,网络直接是被隔离的。我的中控服务器也访问不了,但通常香港服务器能连上它们。针对这些机器,我需要经常登录上去进行一些操作,比如部署一下Java、Python的运行环境,跑跑计算脚本啊之类。那这时候我该怎么处理呢?


方案1

其实要解决ssh登录的问题,方法有很多种,比如说最简单的,前面提到,香港服务器能连上它们,那就先连上它做跳转呗!


这个方法也可以加上一些优化策略,例如:

  1.  通过服务器信任关系的建立,让香港服务器可以直接无密码ssh到美国服务器

  2.  在客户端软件中,设置登录中转机(香港服务器)之后,自动执行ssh 美国服务器的命令

image.png

这样的话,从客户端角度来说,一次设置,长期受益。登录美国vps也能实现一键操作了。

方案2

方案2不做过多赘述,主要是通过代理服务器的方式来实现。配置也比较简单,但在我使用的过程中遇到了一个奇怪的问题,连上了服务器之后,经常自动断连。不过确实没有继续深究,因为这个方案对我来说只是试验性质的。

image.png

方案3

ssh连接,本质上还是通过TCP协议去实现的,如果说我们在香港服务器上,部署一个长期的TCP隧道,岂不是也可以实现对应的效果?


这样一想,思路就打开了,于是就可以有多种实现方式,例如这篇文章:https://blog.csdn.net/Jailman/article/details/125524313。详细地介绍了各种TCP转发的工具。


我也照着试了其中的几种,但不知道为什么iptable一直没有成功,ncat是我寄予厚望的,确实能用,但用的时候稍微出现了点儿问题(比如异常退出),最后,我用了rinet这个工具。rinet配置简单,运行也很方便,一直用也没有发现问题。比如我就配置了好几条策略,分别用几个端口,去映射到了不同的美国服务器。

image.png

在客户端里面,自然也不需要太多额外的配置,地址还是香港服务器,端口改成对应的映射端口即可。


而且,基于这个方案,我们不仅仅可以用来实现隔离网络下,机器的ssh登录问题。很多场景,都可以基于同样的思路去做,例如网站的反向代理、真实服务地址的隐藏等等。

本文链接:https://www.poisonbian.com/post/5048.html 转载需授权!

分享到:
原文链接:,转发请注明来源!
「如何通过ssh连接一台无法直接访问的机器」评论列表

发表评论