SSH隧道的使用
- 2019 年 11 月 8 日
- 筆記
合作部门提供的 redis 集群,kafka 集群,限制条件:无 vpn,仅能通过特定跳板机(无 root 权限)连接调试开发。
想要实现:本地开发连接其 redis 集群,kafka 集群进行开发调试等,否则就只能改一次代码打一次包上传了,众所周知 “Java 码农离开 ide(a) 就不会写代码了”。
项目配置文件中可仅填写一部分 redis 集群的节点,其他节点会自动发现,但是对于跑起来的项目来说,实际还是要连接上其他节点的,所以这就要求本地确实能够连接上所有节点(程序自动发现的 ip:port 即为其提供的不可直接访问的 ip:port)。
先考虑所有的 ip:port 组合都是不同的,即不会出现 192.168.1.2:6379, 192.168.1.3:6379 这种 ip 不同 port 相同的情况。
假设跳板机为 [email protected]:2222
redis cluster:
192.168.9.1:6379
192.168.9.1:6380
192.168.9.1:6381
192.168.9.2:6479
192.168.9.2:6480
192.168.9.2:6481
任务拆解:
1. 给本机(或者其他可控主机)配置所有的的 redis 绑定的 ip,kafka 同理;
2. 所有的 port 映射到对应的 redis 监听的 port,kafka 同理。
具体操作:
1. cmd -> ipconfig /ALL 记录本机现在的 ip 地址、子网掩码、默认网关、DNS 服务器等信息。

配置多 ip

此时查看 cmd ipconfig /all

这样 ip 就配置成功了
2. 端口的映射
ssh -L 192.168.9.1:6179:192.168.9.1:6179 -L 192.168.9.1:6180:192.168.9.1:6180 -L 192.168.9.1:6181:192.168.9.1:6181 -L 192.168.9.2:6279:192.168.9.2:6279 -L 192.168.9.2:6280:192.168.9.2:6280 -L 192.168.9.2:6281:192.168.9.2:6281 -Nf [email protected] -p 2222
不用担心这是 *unix 命令怎么在 windows 上执行的问题,使用 git bash 就可以了。
使用 man ssh 查看下是干了点儿啥

-L 绑定地址端口 本地ip:本地port:目的ip:目的port

-N 不要执行远程命令,仅作端口转发

-f 后台执行
完工,现在访问 192.168.9.1 和 192.168.9.2 就会通过 跳板机(192.168.1.2) 连接上远端的 192.168.9.1 和 192.168.9.2。
最后,如果有存在 192.168.9.1:6379 和 192.168.9.2:6379 这样 ip 不同,端口相同的情况,可以考虑起虚拟机给虚拟机按照上面配置,当然虚拟机是用 windows 还是 *unix 就看熟悉哪个了。