AWS SSH远程连接加速
背景
我们知道,要想操作生产环境的主机,都是必须通过中转机来操作的,也就是说,我们不能够直接连接生产环境的主机进行后台操作。如下图:
- 主机A:我们平时使用的PC机,假设 IP 为 113.118.119.77(深圳电信ip)
- 主机B:AWS 上的 Linux 中转机(原来中转机为 Windows,因为网络较慢,所以替换成 Linux),假设 IP 为:52.74.156.17 (AWS 公网IP)/ 172.10.255.185 (AWS 私网IP)
- 主机C:实际部署应用的主机,假设IP为 172.10.10.181(AWS 私网IP,无公网IP)
主机 A 与 主机 C 之间因为防火墙(AWS中叫 Security Group / ACL),同时也因为不在同一局域网的缘故,我们不能从主机 A 直接访问主机 C,但是,主机 A 可以访问主机 B,主机 B 可以访问主机 C,这样,每当我们要操作主机 C 的时候,就需要从主机 A 先登录到主机 B,然后再从主机 B 上访问主机 C。
为什么了要这样做呢?主要是出于以下考虑:
- 生产环境属于敏感环境,用户较多,不能让开发或测试人员随意改动后台数据和文件,防止环境破坏。所以通过中转机我们可以统一控制入口,随时知道谁做了什么变更。
- 安全原因,如果我们把生产主机暴露在公网之外,那么,即使我们内部人员(开发/测试/...)不会对后台数据和文件进行改动和操作,但是我们没法保证不会有外部人员对我们的环境进行攻击,从而做各种操作,扰乱我们的环境正常。所以,当我们使用中转机之后,只需要将中转机关闭,便使被攻击风险大大降低。
目的
在不降低安全、不修改防火墙等网络配置的情况下,可以方便得在本地直接通过 Xshell 或者类似的 SSH 连接工具连接上生产环境的主机后台,并且做后台操作。
过程
按照我们之前的分析,那么过程应该是很简单,打开XShell,登录到主机 B,然后在主机B上执行 ssh 命令:
ssh 172.10.10.181 -l username
这样,就顺利得到达了主机C。
这种情况在偶尔操作的情况下可行,那万一经常操作还这样来搞,肯定是受不了的,尤其是可能每几分钟就要登录一台机器的时候,那是要崩溃的节奏啊。
为了不让自己崩溃,经过多次试验,下面给出一个比较方便合理的方式来解决这个问题。
步骤一、主机 A 连接主机 B,并在这个连接中创建隧道
隧道 这个词看上去很高大上的样子,但是当我们用工具来实现的时候一切就变得简单了。
首先,打开 XShell SSH 连接工具,建立一个新连接:
这个当然是到主机 B 的连接,所以主机 ip 这里是填主机 B 的公网地址,填完之后,记得选择左边的用红色框起来的"隧道"选项,然后你会看到如下的配置项:
点击这里的"添加"按钮,你会看到这个配置项:
这里的 "类型" 下拉框选择 "Dynamic(SOCK4/5)" 就可以了,其他保持默认。然后 "确认" 完成。
确认完之后看到的配置如下:
然后直接点击 "确认" 完成主机配置,配置完成之后,直接和正常一样连接主机 B,当连接建立之后,打开菜单栏上的 "查看" -> "隧道窗格"
选择之后,你会在 XShell 的底部发现多了一个窗口,里面显示着隧道信息:
记得,一定要选择红色圈出来的"转移规则",然后一定要发现有一条和图上的记录一样的规则,并且状态是 "打开" 的,否则,你一定设置错了,请重新按照步骤设置一次。不然,后面的步骤里将无法进行。
步骤二、连接主机 C
确保你已经完成了第一步的设置,并且已经连接上主机 B,完成之后之后,我们就可以继续下一步了 -- 连接主机 C。
同样,还是新建一个连接,设置如下:
还是添加主机ip,编辑用户名密码之后,记得点击左边红色圈出来的 "代理" 选项。之后,你会看到这么一个设置页面:
你以前没用过的话,这里的下拉框里面肯定没有内容的,所以你需要选择 "浏览"按钮,然后你会看到一个空白的窗口,因为你没有设置过,所以里面肯定没有内容。
所以你需要添加一个,点击窗口中的添加,你会看到一个设置窗口:
- 名称可以随便写,仅做标示用
- 类型必须为 SOCKS5
- 主机可以为 localhost 或者 127.0.0.1
- 端口为 1080,与步骤 1 中设置的端口一致即可
- 不用用户名和密码
点击确定即可。
然后你就可以在代理列表中看到你刚才添加的选项了,选择他,然后点击"确认"完成设置。
结果
打开 Xshell 保存的主机列表,选择主机C,点击连接:
然后主机 C 被直接连上。
需要注意的几点:
- 要连接主机 C 主机 B 必须先连接上,主机 B 断开会导致主机 C 断开
- 连接不上主机 C 需要看主机 B 的转移规则上时候有连接
- 连接上主机 C 之后,你会看到图上的 "渠道" 信息
其他应用
1、网络加速
假设我们的主机 B 和 主机 C 都在爱尔兰,那么从主机 A 到主机 B 之间的延迟会很高,虽然主机 B 和主机 C 之间几乎无延迟,但是结果就是主机 A 到主机 C 的连接延迟也非常高。
因此,将我们上面的方法进行扩大化应用,我们发现主机 A 到 东京的主机延迟很小,东京的主机到爱尔兰的主机延迟也可以接受,因此,我们将组网再加一层,变成4台主机之间的事情,从而达到网络加速的效果。如图:
具体设置过程和上面的设置基本一致,不过有一台主机既开了隧道又使用了代理,最终提供的服务列表应该是这样的:
主机 | 隧道 | 代理 |
---|---|---|
主机 Tokyo | √ | |
主机 B | √ | √ |
主机 C | √ |
这样,从主机 A 直接访问主机 C 就达到了加速的效果。 ###2、Http代理 因为 AWS 在国内暂时没有公开的机房,所以 AWS 的官方以及Web 控制台访问速度都是比较慢的,因此,我们想到能不能你用同样的方式加速 Web 访问呢? 答案是肯定的,只需要在浏览器中安装个插件(IE不悲剧了?)即可,Chrome 中我使用的插件是:Proxy SwitchyOmega,在扩展程序库中搜索安装即可,步骤很简单,就不介绍了。安装完之后你会在 Chrome 的菜单栏中发现一个小圆圈的图标,右键点击它,然后你应该会看到下图所示的菜单: 点击 "选项" 选项,在弹出来的窗口中进行如下设置: 类型还是选择 "SOCKS5",端口选择 1080,然后点击左下方红色圈出来的"应用选项"即可。然后尝试访问一下 aws.amazon.com 试试,看看速度是否得到提升? 对于我这样的火狐脑残粉,我使用的是一款简约的插件:Socks Proxy