准备工作:  

plinkssh1.bat   放在E盘下

plinkssh1.vbs  任意位置

plinkssh2.bat   放在E盘下

plinkssh2.vbs  任意位置

plink.exe   放在E盘下


假设外网服务器IP为  8.8.8.8  映射端口号为 88  本地映射端口号为 80 外网服务器域名 www.abcde.com  ssh登陆账号为root 密码为passwd

外网服务器IP为  8.8.8.8  另一个端口号为 89  本地映射端口号为 81 外网服务器域名 www.abcde.com  ssh登陆账号为root 密码为passwd


在8.8.8.8的服务器/etc/ssh/sshd_config中添加或修改GatewayPorts yes允许端口转发


plinkssh1.bat内容

@echo off

:x

tasklist /nh | find /i /C "plink.exe" > E:\ch.txt

set /p ch=<E:\ch.txt

if %ch%==0 (E:\plink.exe  -ssh -R 8.8.8.8:88:127.0.0.1:80 www.abcde.com -l root -pw passwd)

if %ch%==1 (E:\plink.exe  -ssh -R 8.8.8.8:88:127.0.0.1:80 www.abcde.com -l root -pw passwd)

ping 127.0.0.1 -n 10 > nul

goto x



plinkssh1.vbs内容

set ws=WScript.CreateObject("WScript.Shell")

ws.Run "E:\plinkssh1.bat",0


plinkssh2.bat内容

@echo off

:x

tasklist /nh | find /i /C "plink.exe" > E:\ch.txt

set /p ch=<E:\ch.txt

if %ch%==0 (E:\plink.exe  -ssh -R 8.8.8.8:89:127.0.0.1:81 www.abcde.com -l root -pw passwd)

if %ch%==1 (E:\plink.exe  -ssh -R 8.8.8.8:89:127.0.0.1:81 www.abcde.com -l root -pw passwd)

ping 127.0.0.1 -n 10 > nul

goto x


plinkssh2.vbs内容

set ws=WScript.CreateObject("WScript.Shell")

ws.Run "E:\plinkssh2.bat",0


只需要运行plinkssh1.vbs、plinkssh2.vbs就可以了,并在任务计划中将plinkssh1.vbs、plinkssh2.vbs设为开机启动


set /p ch=<

输入的值为字符串,所以不能用if %ch% less 2来简化命令,如果有转换数值的命令,麻烦告知下,谢谢

plinkssh1.vbs plinkssh2.vbs不能合并为一个plinkssh.vbs,当合并为plinkssh.vbs时,只运行第一个plink1.bat


断点重连效果是:杀死plink.exe进程或远端服务器断开时,在10秒内可以重连,当ssh连接时脚本不执行ping本机和搜索本机进程命令,当ssh连接不上时,该脚本一直循环直到连上为止。可通过设ping的时间来减少连接不上的搜索进程次数。脚本的进程程序是cmd.exe,杀死cmd.exe时,plink仍可以连接,只是没有断点重连效果。