通过阿里云服务器,使用ssh、autossh建立反向隧道连接到AWS亚马逊服务器详细教程

原因

公司在亚马逊上购买了一台AWS服务器,使用内网连接超级慢(应该是公司内网的锅),即使登录进去了,一直卡卡的,输入命令回显平均延迟1分钟。。。就是在这种环境下,我竟然忍着安装了docker,然后在docker中启动了mysql,redis,nginx服务,接着部署了两个java web后端项目(目的时使用nginx做双机热备,这样后端更新一台服务时,不影响用户使用),整整花了我一天!!!但是内网连接到阿里云服务器速度那是杠杠的,于是就想着使用ssh反向隧道连接到AWS服务器上。

服务器介绍

  • AWS(目标服务器:) 用户名(ubuntu),ip地址(xxx.xxx.ubun.tu)
  • 阿里云服务器(中间服务器):用户名(root),ip地址(xxx.xxx.ali.yun)

ssh反向隧道概念

原理是通过反向代理和正向代理结合使用。

1.反向代理:使用代理服务器(阿里云)来接受外部internet请求,然后将请求转发给内部服务器(AWS),将服务器处理结果返回给外部internet请求客户端,此时代理服务器和内部服务器时一体的,一般是通过外网来访问公司内网服务器。
2.正向代理:正向代理服务器是位于请求客户端和真正数据源服务器中间的一台代理服务器,比如我们国内想访问google,需要*,这里的*其实就是使用了代理服务器,我们将请求发给代理服务器,代理服务器帮我们去源服务器取数据然后将处理结果返回给我们。代理服务器需要配置,其实就是交钱才给干活!!!

ssh反向连接过程

  • 首先登录到AWS目标服务器上,建立AWS服务器到阿里云服务器的反向代理
    通过阿里云服务器,使用ssh、autossh建立反向隧道连接到AWS亚马逊服务器详细教程
  • 输入如下命令:ssh -fCNR 10002:localhost:22 [email protected]

    格式为:ssh -fCNR [中间服务器ip,可省略]:[中间服务器端口]:[目标服务器ip]:[目标服务器端口]
    [登录的中间服务器用户名@中间服务器ip地址]
  • 登录阿里云中间服务器,建立正向代理服务器,实现端口转发
    通过阿里云服务器,使用ssh、autossh建立反向隧道连接到AWS亚马逊服务器详细教程
  • 输入如下命令:ssh -fCNL *:10001:localhost:10002 localhost
    格式为:ssh -fCNL [目标服务器ip,可省略]:[目标服务器端口]:[中间服务器ip]:[中间服务器端口]
    [登录的中间服务器用户名@中间服务器ip地址]


    ssh 命令解释

    – f: 后台执行ssh指令
    – C:压缩数据
    – N:不执行远程命令
    – R:将远程服务器的某个端口转发到本地服务器的指定端口,上面就是将10002–> 22
    – L:将本地服务器的某个端口转发到远程服务器的指定端口
    – p:指定远程服务器的端口

  • 上面的10001端口是用来实现本地转发服务的,主要是接收外部internet请求,并将请求转发到10002端口,
    *代表接收任何地址,从而可以实现从任何一台外网服务器连接访问目标服务器

测试连接

上面两台服务器的配置基本上已经完成,下面可以测试连接了,试试现在的速度怎样,哈哈,激动的时刻终于来了!

连接命令如下:首先得连接到中间服务器 ssh [email protected],再执行下面命令

ssh -p10001 [email protected]
通过阿里云服务器,使用ssh、autossh建立反向隧道连接到AWS亚马逊服务器详细教程

试了一下,现在的速度很快,操作非常流畅,达到了我们预期目标。到这一步,基本上整个ssh反向隧道连接配置接近尾声,但是ssh反向连接会偶尔出现超时关闭,这样就无法维持一个稳定的代理连接,接下来可以通过autossh提供稳定的ssh反向隧道连接。

autossh稳定ssh反向隧道连接配置

  • ubuntu 16.04 安装autossh
  • $ sudo apt-get install autossh
  • 使用autossh建立稳定连接隧道
    输入如下命令:autossh -M 10003 -fCNR 10002:localhost:22 [email protected]