Windows下使用AutoSSH,並作為服務自啟動(不用安裝Cygwin)


之前的折騰過Windows下ssh的自動登錄,比如這篇Windows下使用Xshell建立反向隧道,但是這個不能無交互的情況下自動連接(比如在連接新主機時),也就很難在服務中使用。解決方法還是得使用命令行版本。

 

OpenSSH其實是有Windows版本的,並且目前還在維護:https://github.com/PowerShell/Win32-OpenSSH。至於AutoSSH,還是得借助Cygwin。但是Cygwin的程序加上cygwin1.dll后是可以直接在Windows下運行的,所以不需要安裝Cygwin附件的壓縮包里也有ssh、AutoSSH以及所需的dll,可直接使用。可執行文件是32位的,但是Win10 64位實測可以使用。

 

AutoSSH的使用方法網上很多,這里需要注意的一點是,需要在使用時要指明ssh的路徑,否則他只會在默認路徑(/usr/bin/ssh)下尋找。Cygwin下訪問Windows的文件需要借助/cygdriver,但是在沒有完整的Cygwin環境下使用這個路徑會有啥效果我也不知道。(我應該是試過的,但是忘了……)。把ssh.exe和autossh.exe放在同一個目錄下,然后在命令行窗口下指定以下環境變量可解決這個問題:

set AUTOSSH_PATH=./ssh.exe

然后就可以正常使用AutoSSH了。另外,實測AutoSSH在一些情況下還是會自動退出,所以還是需要使用一個死循環來一直執行。目前把這些工作寫在了一個bat文件里:

@echo off

:: 在這里更改你的設置
:: setting
set HOST="username@host.com"
set KEY_FILE="id_rsa_private"
set REMOTE_PORT=8180
set MONITOR_PORT=8280
set LOCAL_PORT=23


echo ***

:LOOP

echo [%HOST%] [%date% %time%] Autossh running...
set AUTOSSH_PATH=./ssh.exe
set AUTOSSH_LOGLEVEL=7
set "AUTOSSH_DEBUG="
autossh.exe -M %MONITOR_PORT% %HOST% ^
  -i %KEY_FILE% -R 0.0.0.0:%REMOTE_PORT%:127.0.0.1:%LOCAL_PORT% -N ^
  -o "PubkeyAuthentication=yes" -o "StrictHostKeyChecking=false" -o "PasswordAuthentication=no" -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3"

timeout 60 > NUL
goto LOOP

echo [%HOST%] [%date% %time%] exited

 

需要建立反向隧道的時候,運行這個批處理就好。有需要的話,可以把這個批處理作為服務啟動。把一個可執行的文件轉為服務的軟件我推薦這個:NSSM - the Non-Sucking Service Manager

 

附件:autossh-cygwin.rar


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM