之前的折騰過Windows下ssh的自動登錄,比如這篇Windows下使用Xshell建立反向隧道,但是這個不能無交互的情況下自動連接(比如在連接新主機時),也就很難在服務中使用。解決方法還是得使用命令行版本。 OpenSSH其實是有Windows版本的,並且目前還在維護:https://githu ...
之前的折騰過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="[email protected]" 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