@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 密鑰認證。