






















此时需要在 Windows 11 主机上建立反向隧道,将本地端口映射到公网服务器的固定端口。
编辑 /etc/ssh/sshd_config:
GatewayPorts yes
AllowTcpForwarding yes
重启 SSH:
这允许远程客户端通过 SSH 将端口绑定到公网 IP(而不仅是 127.0.0.1)。
在 Windows 11 上以管理员身份打开 PowerShell 或 CMD:
# 假设 CentOS 的 SSH 用户为 testuser,IP 为 220.228.253.101 ssh -R 0.0.0.0:502:127.0.0.1:502 \ -R 0.0.0.0:503:127.0.0.1:503 \ -R 0.0.0.0:504:127.0.0.1:504 \ testuser@220.228.253.101
注意:这里假设 Modbus 服务在 Windows 上监听
127.0.0.1或0.0.0.0。如果是192.168.3.20,则把127.0.0.1改成192.168.3.20。
这样,当连接成功后:
220.228.253.101:502 的流量都会被转发到 Windows 11 的 502 端口。适用于无法使用 WSL 的环境。
创建文件:C:\Scripts\modbus_autossh.ps1
# modbus_autossh.ps1
$ErrorActionPreference = "Stop"
$CENTOS_USER = "testuser"
$CENTOS_HOST = "220.228.253.101"
$LOCAL_IP = "192.168.3.20"
$PORTS = @(502, 503, 504)
# 日志函数
function Write-Log {
param([string]$msg)
$log = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - $msg"
Write-Host $log
Add-Content -Path "C:\Scripts\tunnel.log" -Value $log
}
# 构建 SSH 参数
$sshArgs = @(
"-o", "StrictHostKeyChecking=no",
"-o", "ServerAliveInterval=30",
"-o", "ServerAliveCountMax=3",
"-o", "ExitOnForwardFailure=yes",
"-N"
)
foreach ($port in $PORTs) {
$sshArgs += "-R", "0.0.0.0:${port}:${LOCAL_IP}:${port}"
}
$sshArgs += "${CENTOS_USER}@${CENTOS_HOST}"
while ($true) {
Write-Log "Starting SSH tunnel..."
# 启动 SSH 进程(前台阻塞)
$proc = Start-Process -FilePath "ssh" -ArgumentList $sshArgs -PassThru -Wait
# 如果退出,记录并等待重连
Write-Log "SSH process exited with code: $($proc.ExitCode)"
Write-Log "Reconnecting in 10 seconds..."
Start-Sleep -Seconds 10
}
⚠️ 注意:此脚本会前台运行 SSH(
-Wait),确保能捕获退出事件。
创建:C:\Scripts\start_tunnel.bat
@echo off
cd /d C:\Scripts
powershell.exe -ExecutionPolicy Bypass -File "C:\Scripts\modbus_autossh.ps1"
taskschd.mscModbus AutoSSH (PowerShell)C:\Scripts\start_tunnel.bat✅ 开机后,脚本将持续运行,断线自动重连。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。