ssh-tunnel原理及其使用

跳板机原理

先来说说跳板机原理(如下图),一般用于生产环境,一边是我们的本机所处的公共互联网环境,另一边是生产服务所处的生产环境,生产环境内部的机器仅能通过内网IP或内网域名进行访问。这种方式使得我们的生产环境与外部进行了有效的隔离,起到了一定的保护作用,但是为了从互联网上进行访问,就需要提供其中的一台机器作为跳板,能够对生产的服务器进行管理,这台机器被我们称为跳板机。 日常我们通过本机访问生产服务时要使用SSH隧道。 ssh-tunnel

应用

这里想要介绍一下如何通过本地redis-cli来连接生产redis

1
2
3
# 示例代码
ssh -L 6378:10.10.1.200:6379 root@jms.foo.com
redis-cli -p 6378

第一个命令通过ssh连接到了jms.foo.com这台主机上,并且使用了-L参数指定了监听本地的6378端口,然后所有连接到本地6378端口上流量都会通过已建立的ssh连接转发到远端服务器上,并且远端服务器会将流量转发到10.10.1.200主机6379端口上。

第二个命令就是redis-cli连接到本地6378端口上,通过这种方式就可以通过跳板机访问生产redis了

同理如果你也可以通过本地mysql命令行访问生产数据库。

理论部分:
ssh命令的-L选项代表的含义
-L [bind_address:]port:host:hostport
bind_address 这个是可填项,一般可以不填,表示绑定本地主机上的所有网卡接口
port 表示本地绑定的端口号
host和hostport表示通过跳板机将流量转发到哪台机器的哪个端口上

参考
https://myopswork.com/ssh-tunnel-for-rds-via-bastion-host-6659a48edc