@echo off
:loop
ssh -N -L 13306:192.168.0.3:23306 -o ServerAliveInterval=60 admin@192.168.0.2
timeout /t 5
goto loop
代码功能剖析
1、基础设置:
@echo off
此命令的作用是让批处理脚本在执行过程中不显示命令行,从而使输出更为简洁。
2、定义循环标签:
:loop
这里定义了一个名为loop
的标签,其用途是为后续的循环跳转提供目标位置。
3、SSH 隧道建立命令:
ssh -N -L 13306:192.168.0.3:23306 -o ServerAliveInterval=60 admin@192.168.0.2
该命令包含多个参数,各参数功能如下:
-N
:表明此 SSH 连接仅用于端口转发,不会执行远程命令。-
-L
13306:192.168.0.3:23306:这是端口转发的具体配置,意思是将本地(127.0.0.1)的 13306 端口映射到远程主机192.168.0.3
的 23306 端口。这里的流量走向是:本地端口 13306 → SSH 服务器192.168.0.2
→ 目标主机192.168.0.3
的 23306 端口。 -o ServerAliveInterval=60
:设置 SSH 客户端每隔 60 秒向服务器发送一次 "心跳" 包,以此来维持连接的稳定性,防止连接因长时间无数据传输而断开。admin@192.168.0.2
:指定使用admin
用户连接到 SSH 服务器192.168.0.2
。
4、连接断开后的处理:
timeout /t 5
goto loop
当 SSH 连接意外断开时,脚本会先暂停 5 秒(通过timeout /t 5
实现),然后跳回到loop
标签处(通过goto loop
实现),重新尝试建立 SSH 连接,以此保证服务的连续性。
典型应用场景
- 远程数据库访问:当你需要访问位于内网(如
192.168.0.3
)的数据库,而该数据库只能通过中间服务器(192.168.0.2
)访问时,就可以使用此脚本。 - 服务高可用性保障:借助自动重连机制,能够确保网络波动时服务仍能正常运行。
使用注意要点
- 权限要求:运行此脚本前,需要确保
admin
用户对 SSH 服务器192.168.0.2
有访问权限,并且该服务器允许端口转发功能。 - 端口占用情况:要保证本地的 13306 端口没有被其他程序占用,否则 SSH 连接将无法正常建立。
- 密钥配置建议:为了避免每次连接都需要手动输入密码,建议配置 SSH 密钥认证。