啰嗦的話放在最后,先上干貨。
這篇文章僅為自己記錄參考,方便以后新電腦重新配置。有的步驟如果不懂,不會過多解釋。
需求
家里無法申請到公網(wǎng)ip,但是買了騰訊云/阿里云等的服務(wù)器有公網(wǎng)ip。希望通過配置,實現(xiàn)家中的電腦在有電有網(wǎng)的情況下,可以讓任何其他有網(wǎng)絡(luò)的地方都可以遠程連接到家里的電腦。 且當(dāng)遇到網(wǎng)絡(luò)波動或故障時,在網(wǎng)絡(luò)恢復(fù)后也能很快重新提供遠程訪問的能力。
參考
為了實現(xiàn)這一點,參考了一下幾篇文章:
https://zhuanlan.zhihu.com/p/400086370
http://www.huangwenchao.com.cn/2016/10/windows-ssh-socks.html
https://blog.csdn.net/chg1226/article/details/117903288
下文很多內(nèi)容,來自這三篇中內(nèi)容的整合(后文不再特意說明某部分內(nèi)容來自哪里),以及自己找的資料,讓遠程訪問的能力更加完善,不會輕易掛掉無法重啟。
準備
1 windows10 專業(yè)版
一般買電腦激活的都是windows10 家庭版。遠程電腦的功能在專業(yè)版上,但是現(xiàn)在專業(yè)版限制只能企業(yè)來購買。所以個人只能去某寶十來塊就可以解決。
2 云服務(wù)器
騰訊云/阿里云等可以購買云服務(wù)器,并且提供了公網(wǎng)ip
3 windows電腦下載 Cygwin
下載OpenSSH AutoSSH cygrunsrv
4 另一個設(shè)備用于測試
另一臺電腦測試能否遠程訪問家里的電腦
或者安卓設(shè)備安裝微軟提供的官方app,測試遠程訪問家里的電腦
https://docs.microsoft.com/zh-cn/windows-server/remote/remote-desktop-services/clients/remote-desktop-clients
因為微軟將app放到谷歌商店了,所以國內(nèi)手機要使用就要找到apk文件,然后進行安裝??梢詮?apkpure 網(wǎng)站找一下。
詳細步驟
激活windows 10專業(yè)版
某寶買然后找客服,按照步驟來就行了。
開啟遠程桌面功能
開始菜單 > 設(shè)置 > 系統(tǒng) > 遠程桌面”中啟用遠程桌面

安裝Cygwin 安裝OpenSSH AutoSSH cygrunsrv
進官網(wǎng) https://www.cygwin.com/ 安裝,進入傻瓜模式安裝。注意,在選擇安裝包時,它會默認選中一些安裝包,但是缺少OpenSSH,AutoSSH以及cygrunsrv??梢栽谧笊辖撬阉飨玛P(guān)鍵字,找到后,選擇該條目的版本,它就會在后續(xù)安裝時安裝這個版本的包。
如果真的忘記這一步了,也沒有關(guān)系。安裝完 Cygwin 后,再次雙擊安裝程序,一步一步走,走到選擇安裝包的那一步會發(fā)現(xiàn)剛才默認安裝的包,程序都檢測到安裝好了,不會再次進行安裝,因此只要我們選擇自己想要的包,選擇好版本,然后點擊下一步,就可以安裝新選擇的包。
如果在執(zhí)行 Cygwin 時遇到報錯,考慮可能要右鍵圖標(biāo),然后“以管理員身份運行”打開,就不會報錯了。
SSH配置
以下命令在windows的cmd中運行
mkdir %userprofile%\.ssh
mklink /J "D:\mySoftWare\Cygwin\home\xzxz\.ssh" "%userprofile%\.ssh"
其中,第二個命令中的 D:\mySoftWare\Cygwin\home\xzxz\.ssh 你可以找到自己安裝的 Cygwin 的安裝目錄,然后可以發(fā)現(xiàn)在該目錄下有一個home文件夾,下面一般只有一個用戶,假設(shè)我的用戶叫做xzxz,最后加上 \.ssh即可。我的路徑就是這么拼湊出來的。
這個命令的意思是, Cygwin 中用戶xzxz下的 .ssh 文件實際上是鏈接到 windows 中的 %userprofile%\.ssh。也就是 Cygwin 中的 ssh 配置用的都是 windows系統(tǒng)的ssh配置。
兩邊都可以修改各自的.ssh文件,修改后對兩邊都生效。
以下命令在Cygwin中執(zhí)行
ssh-keygen
ssh-copy-id -p 22 xxx@111.222.333.444
這兩個命令是用于免密登錄云端服務(wù)器用的。其中第二個命令中的 xxx@111.222.333.444 xxx 指的是登錄云端服務(wù)器的用戶名是什么,這個名字在你購買云服務(wù)器時就配置了登錄用戶和密碼。而 111.222.333.444 指的時云服務(wù)器的公網(wǎng)ip,同樣是在購買時,在購買商的控制臺都可以看到這些信息。
這兩步完成后,其實就意味著在Cygwin中可以免密登錄云服務(wù)器了。而由于Cygwin的ssh配置其實和windows的是同一個,因此在windows中也可以免密登錄云服務(wù)器了。可以通過下面的命令分別在 Cygwin 以及 windows系統(tǒng)的cmd中測試是否可以免密登錄。
ssh xxx@111.222.333.444
將windows的ssh.exe同樣link到Cygwin的bin目錄中
與上面的找目錄的方式一致,找到 D:\mySoftWare\Cygwin\bin 中,查看里面必須含有 autossh.exe 以及 ssh.exe。我遇到的情況是:我通過Cygwin安裝了autossh,因此bin目錄中有autossh.exe,但是沒找到ssh.exe,因此將 windows 的ssh.exelink到這個目錄了。如果你有ssh.exe可以不用管這一步,Link命令與上面類似,如下:
mklink "D:\mySoftWare\Cygwin\bin\ssh.exe" "C:\Windows\System32\OpenSSH\ssh.exe"
云服務(wù)器配置
登錄云服務(wù)器中,編輯云主機的/etc/ssh/sshd_config文件,找到 GatewayPorts 這個配置,一般是被注釋掉的,打開它,然后配置其值是 yes。
GatewayPorts yes
重啟 sshd 服務(wù)
sudo service sshd restart
同時,在購買云服務(wù)器的提供商,如騰訊云/阿里云的控制臺,將3389端口放行。以騰訊云為例,云服務(wù)器配置系統(tǒng)中找到“安全組”,可以摸索下,騰訊云默認提供了常用端口的放行規(guī)則。使用這個“一鍵放通”就好了。

windows電腦的配置
在 %userprofile%.ssh 下新建一個 config 文件,填寫以下內(nèi)容:
Host myhost
Hostname 111.222.333.444
Port 22
User xxx
IdentityFile ~/.ssh/id_rsa
RemoteForward 3389 localhost:3389
ServerAliveInterval 100
在 Cygwin 中測試下:
ssh myhost
上面的命令會免密登錄云服務(wù)器中。輸入 exit 退出云服務(wù)器。會返回 Cygwin
繼續(xù)測試 autossh
export AUTOSSH_DEBUG=1
autossh -M 4000 myhost
autossh --help可以看到該命令可以通過環(huán)境變量調(diào)整日志。
上面的第一個命令是設(shè)置一個臨時環(huán)境變量,讓autossh命令執(zhí)行時,打印debug日志,便于調(diào)試問題。
第二個命令則是在云服務(wù)器開了一個家里的windows電腦桌面的3389端口,如果從其他地方的機器連接這個3389端口,流量會導(dǎo)到云服務(wù)器后面那臺家里的windows電腦。
測試遠程登錄
此時,使用另一臺電腦或者安裝了apk的安卓設(shè)備,測試遠程登錄。其中ip輸入的是云服務(wù)器的公網(wǎng)ip。而登錄信息就是你家里電腦的登錄名和密碼。如果不知道登錄名是什么,可以進入windows“設(shè)置”,然后搜索“賬戶”,選擇找到的“管理你的賬戶”或者“你的賬戶信息”均可。

可以看到,如果是管理員用戶的話,下圖中綠色部分的內(nèi)容就是登錄名。

或者,對于普通的本地用戶,下圖中馬賽克部分的內(nèi)容就是登錄名。

把autossh做成系統(tǒng)服務(wù)
打開一個有系統(tǒng)管理員權(quán)限的cmd,輸入下面的命令:
cygrunsrv -I AutoSSH --path D:\mySoftWare\Cygwin\bin\autossh.exe -a "-M 4000 myhost -N" -e AUTOSSH_DEBUG=1 -e AUTOSSH_LOGFILE=/var/log/autossh.log -e AUTOSSH_NTSERVICE=1
命令中的路徑根據(jù)自己的安裝情況替換下。
這個命令會在 windows 系統(tǒng)的服務(wù)中創(chuàng)建一個名叫 AutoSSH 的服務(wù)。你可以打開Cygwin,然后進入 /var/log/ 目錄中找到 autossh.log 。查看該服務(wù)的運行情況。如果遇到問題,會有debug日志打印到這個文件中。
我遇到的問題是無法在 Cygwin/bin 目錄中找到 ssh.exe。這個問題在上文中通過link到windows的ssh.exe已經(jīng)解決了。
你可以在windows 10系統(tǒng)的左下角,輸入 “服務(wù)” 兩個字,然后選擇下圖的圖標(biāo)打開服務(wù)。

可以找到 AutoSSH 這個新建的服務(wù)。

在這里,你可以手動的 啟動/停止/重啟動 這個服務(wù)。
至此,我們使用 autossh 可在網(wǎng)絡(luò)不穩(wěn)定時以及ssh超時后重新連接。同時將其做成了系統(tǒng)服務(wù)。
但是我們還是需要手動啟動,并且一旦家里網(wǎng)絡(luò)不穩(wěn)定,導(dǎo)致斷網(wǎng),即便后續(xù)網(wǎng)絡(luò)恢復(fù)正常,也有可能遇到遠程訪問家里的電腦也無法正常工作了。
這是因為有的時候,網(wǎng)絡(luò)正常后,autossh可以發(fā)現(xiàn)并且嘗試重連,但是云服務(wù)器對我們配置的 4000 3389端口還保持著監(jiān)聽,因此autossh也會在日志中打印報錯信息。雖然在經(jīng)過30~40分鐘的超時重試后,最終autossh還是會放棄舊連接,建立新連接。但是時間太長了,我們想盡可能減少無法訪問的時間。
所以,我們需要實現(xiàn)自動化:
- 開機并且連接網(wǎng)絡(luò)后就自動啟動該服務(wù),即便不登陸任何用戶
- 網(wǎng)絡(luò)中斷一段時間后,如果網(wǎng)絡(luò)恢復(fù)了,就重啟該服務(wù),并將云服務(wù)器中對 4000 和 3389端口的監(jiān)聽進程kill掉。以便網(wǎng)絡(luò)恢復(fù)后可以通過autossh與云服務(wù)器建立新的連接
自動化
windows wifi自動連接
如果是有線網(wǎng)不用考慮這個問題。
如果是無線網(wǎng)絡(luò),在設(shè)置中搜索“管理已知網(wǎng)絡(luò)”

然后點擊

選中你常用的wifi,點擊“屬性”

將wifi自動連接的開關(guān)打開

設(shè)置成功后,在電腦開機時,到了用戶登錄頁面,即便不登陸,也會自動發(fā)現(xiàn)并連接網(wǎng)絡(luò)。
開機自啟動服務(wù)
windows系統(tǒng)左下角,輸入“任務(wù)計劃程序”,點擊進入。

點擊“創(chuàng)建任務(wù)”,見下圖:

在“常規(guī)”這個頁面中,對照上圖填寫。其中注意一定要選擇
不管用戶是否登錄都要運行,然后勾選中 使用最高權(quán)限運行切換到“觸發(fā)器”頁面,按照下圖4個步驟,比照圖片操作好:

切換到“操作”頁面。
這個頁面填寫任務(wù)被觸發(fā)時,要執(zhí)行哪些命令。
如下圖所示,會執(zhí)行2個命令:先停止AutoSSH服務(wù),然后再啟動AutoSSH服務(wù)。
因此要先新建一個停止的命令,再新建一個啟動的命令,就如同下圖這樣的上下的關(guān)系。
下圖以新建一個停止的命令為例進行配置。啟動命令的步驟與它類似,只是填寫的參數(shù)稍有不同,都在下圖體現(xiàn)了。

切換到“條件”頁面
AutoSSH服務(wù)只有在wifi連接時才能提供遠程桌面訪問的能力。因此要配置成下圖這樣的條件。

切換到“設(shè)置”頁面
按照下圖進行設(shè)置即可

至此,開機后,即便不登錄用戶,等自動連接到網(wǎng)絡(luò)后,就會自動開啟AutoSSH服務(wù),提供遠程桌面訪問的能力。
你可以此時重啟電腦試一下。
網(wǎng)絡(luò)故障恢復(fù)后執(zhí)行腳本
如上文所述,當(dāng)遇到網(wǎng)絡(luò)故障后,我們就無法遠程訪問家里的電腦了,等網(wǎng)絡(luò)恢復(fù)后,有的時候,即便我們使用autossh可以在網(wǎng)絡(luò)恢復(fù)后嘗試重新連接云服務(wù)器,但是由于云服務(wù)器還使用網(wǎng)絡(luò)故障前的進程監(jiān)聽4000和3389端口,因此網(wǎng)絡(luò)恢復(fù)后,autossh嘗試重新連接云服務(wù)器也會失敗。通過上文創(chuàng)建windows服務(wù)時的腳本,我們指定了autossh的日志文件位置,我們可以打開Cygwin,進入 /var/log 查看AutoSSH.log日志,會發(fā)現(xiàn)有如下報錯:
Warning: remote port forwarding failed for listen port 4000
Warning: remote port forwarding failed for listen port 3389

這時,如果登錄云服務(wù)器,通過 sudo netstat -anpt | grep 4000 查找pid,然后kill掉該進程即可恢復(fù)遠程訪問能力。查找4000端口和查找3389端口找到的pid是一樣的,因此這里就以查找4000端口為例進行說明了。
為了解決這一問題,我們需要一個腳本,該腳本可以周期性的運行,判斷網(wǎng)絡(luò)狀態(tài)。如果發(fā)現(xiàn)網(wǎng)絡(luò)由壞變好,就去云服務(wù)器刪除舊的pid,然后重啟windows服務(wù)AutoSSH。
其中,周期性的運行腳本是windows任務(wù)計劃程序可以做到的事情,我們剛才也剛剛創(chuàng)建了一個電腦啟動且聯(lián)網(wǎng)后啟動AutoSSH服務(wù)的任務(wù)計劃程序。而另一個關(guān)鍵是編寫一個腳本,可以后臺運行上述判斷及相關(guān)命令。
腳本
在云服務(wù)器中的腳本
通過ssh命令進入云服務(wù)器,如:
ssh xxx@111.222.333.444
因為已經(jīng)配置好免密登錄了,所以可以直接登進去。
進入后,請確認命令 netstat 是可以執(zhí)行的。如果報錯說找不到/不認識這個命令,你可以通過百度將netstat這個命令安裝上。
進入當(dāng)前用戶目錄,命令: cd ~,然后新建文件,命令:vi kill_old_remote_process.sh
將下面的內(nèi)容填充到sh文件中:
#! /bin/bash
pid_4000=$(echo your_password| sudo -S netstat -anpt | grep 4000 | grep sshd | head -n 1 | awk '{printf $7}'| cut -d/ -f1)
echo $pid_4000
if [ -n "$pid_4000" ]
then
kill -9 $pid_4000
else
echo "4000 and 3389 port is not started"
fi
你需要將上面的your_password換成登錄云服務(wù)器的密碼。保存并退出。
這個腳本的作用是,通過netstat查找端口4000的進程id,如果存在的話就kill它,如果不存在正好。
最后,將這個文件設(shè)置為可執(zhí)行文件,粗暴的命令:chmod u+x kill_old_remote_process.sh
在windows電腦的腳本
在D盤新建一個 remote_desk 的文件夾,用于保存腳本相關(guān)的文件。一定要是這個名字,因為和下面的腳本內(nèi)容有關(guān)系,如果你可以修改腳本,可以自己找一個地方新建文件夾。
新建一個文件: check_net.bat ,并填充以下內(nèi)容
@echo off
ping www.baidu.com
if errorlevel 1 (
echo net disconnect. will create net_block file.
@echo>"D:\remote_desk\net_block"
)else (
echo net well! check net_block file exist or not!
if exist D:\remote_desk\net_block (
echo find net_block file, will delete it. Then kill previous pid in cloud server. Then stop service, finally start service.
del /f /s /q D:\remote_desk\net_block
ssh xxx@111.222.333.444 "bash ~/kill_old_remote_process.sh"
cygrunsrv -E AutoSSH
cygrunsrv -S AutoSSH
)else (
echo not find net_block file, will do nothing
)
)
這個腳本的作用是通過ping百度,確認當(dāng)前網(wǎng)絡(luò)是否有問題。
如果有問題,就在文件夾下創(chuàng)建一個net_block文件。
如果沒問題,代表網(wǎng)絡(luò)是好的,此時有2種可能:
- 網(wǎng)絡(luò)剛剛從故障恢復(fù)為可用
- 網(wǎng)絡(luò)一直都可用
而判斷這兩種情況的關(guān)鍵,就是net_block文件。如果該文件存在,則說明上次運行該腳本時,還是網(wǎng)絡(luò)有故障的,現(xiàn)在網(wǎng)絡(luò)恢復(fù)了。
而這,正是上文說的,當(dāng)網(wǎng)絡(luò)由故障恢復(fù)正常后,需要kill掉云服務(wù)器上的進程,然后本地windows的AutoSSH服務(wù)重啟下。
因此腳本中這部分的邏輯就是:
- 刪除
net_block文件,這樣下次運行即便網(wǎng)絡(luò)也是通暢的,也因為缺少net_block文件,就能知道這不是網(wǎng)絡(luò)剛剛恢復(fù)為可用,因此不用執(zhí)行復(fù)雜的邏輯。 - 云服務(wù)器kill以前的進程
- 本地windows的AutoSSH服務(wù)重啟
同目錄下,再新建一個 check_net.vbs 的文件,填充以下內(nèi)容:
CreateObject("WScript.Shell").Run "cmd /c D:/remote_desk/check_net.bat",0
這是因為 .bat 類型的文件,如果作為任務(wù)計劃程序的命令執(zhí)行文件,會出現(xiàn)黑窗口(也就是cmd的命令窗口),從而打擾當(dāng)前正在使用電腦的人。因此這個vbs腳本就是隱藏這個窗口的。
新建任務(wù)計劃程序 任務(wù)
與上文類似,進入任務(wù)計劃程序,點擊創(chuàng)建任務(wù)。
”常規(guī)“頁面
配置如下圖。一般我們以登錄的用戶創(chuàng)建任務(wù)時,運行任務(wù)時,請使用下列用戶賬戶的值是當(dāng)前電腦的登錄用戶名。如果你測試后發(fā)現(xiàn)該用戶沒有足夠的權(quán)限,那么可以像下圖一樣,配置為Administrators。

配置為Administrators的步驟:
點擊更改用戶或組,在彈出的窗口中,選擇左下角的高級,在彈出的窗口中,選擇右側(cè)的按鈕立即查找,然后雙擊下圖箭頭所指的用戶

注意不要雙擊錯了,這兩個就差了最后的字母
s,我們需要雙擊的是帶s的這個。雙擊后,會返回上一個窗口,這時候點擊
確定
”觸發(fā)器“頁面
紅色方框框起來的需要按照圖片進行配置。

這樣,就會在每天中,每間隔5分鐘執(zhí)行該任務(wù)。
”操作“頁面
按照下圖進行配置。其中需要注意,如果你把腳本放到其他地方,需要在這里確定腳本的路徑是對的。

”條件“頁面
按照下圖配置

”設(shè)置“頁面
按照下圖配置

保存該任務(wù)。
整體測試
至此,我們的配置全部完成??梢匀鞒套咭槐?,測試下各類情況下的表現(xiàn)。
1 重啟電腦
電腦重啟后,不輸入密碼,即不登錄任何用戶。可以看到此時右下角是有網(wǎng)絡(luò)標(biāo)志的,稍等一會會自動連上wifi。
而根據(jù)我們配置的第一個任務(wù),會在電腦啟動并且有網(wǎng)絡(luò)時,即便沒有登錄,也會開啟AutoSSH服務(wù),提供遠程桌面訪問的能力。
所以,此時我們可以遠程登陸下,測試結(jié)果預(yù)期是可以登錄的。
2 驗證網(wǎng)絡(luò)波動 - 斷網(wǎng) -> 周期性任務(wù)執(zhí)行 -> 聯(lián)網(wǎng) -> 周期性任務(wù)執(zhí)行
對應(yīng)超過5分鐘的斷網(wǎng)情況。
斷掉網(wǎng)絡(luò)連接,此時再次嘗試遠程登錄,預(yù)期是無法成功的。
等待5分鐘以上,讓周期性任務(wù)可以執(zhí)行一次,它會發(fā)現(xiàn)網(wǎng)絡(luò)故障的問題,并創(chuàng)建 net_block 文件。
然后再恢復(fù)網(wǎng)絡(luò)連接,等待周期性任務(wù)再次被執(zhí)行,發(fā)現(xiàn)此時網(wǎng)絡(luò)恢復(fù)了,根據(jù)腳本的命令會刪除云服務(wù)器的舊的進程然后重啟windows的AutoSSH服務(wù)。就可以繼續(xù)提供正常的遠程桌面訪問能力了。
3 驗證網(wǎng)絡(luò)波動 - 斷網(wǎng) -> 等待/var/log/AutoSSH.log顯示ssh報錯日志 -> 聯(lián)網(wǎng) -> 周期性任務(wù)執(zhí)行
對應(yīng)3~5分鐘的斷網(wǎng)情況。
一開始斷網(wǎng)后,觀察日志沒有立刻反饋有問題,估計是有超時設(shè)置。等了一會后,發(fā)現(xiàn)日志顯示:
client_loop: send disconnect: Connection reset
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: check on child 752
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: ssh exited with error status 255; restarting ssh
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: expired child, returning 1
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: clear alarm timer (404 secs left)
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: checking for grace period, tries = 0
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: starting ssh (count 2)
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: ssh child pid is 753
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: check on child 753
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: clear alarm timer (0 secs left)
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: set alarm for 600 secs
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[753]: child of 751 execing /usr/bin/ssh
ssh: connect to host myhost port 22: Unknown error
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: check on child 753
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: ssh exited with error status 255; restarting ssh
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: expired child, returning 1
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: clear alarm timer (600 secs left)
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: checking for grace period, tries = 1
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: starting ssh (count 3)
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: ssh child pid is 754
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: check on child 754
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: clear alarm timer (0 secs left)
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: set alarm for 600 secs
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[754]: child of 751 execing /usr/bin/ssh
ssh: connect to host myhost port 22: Unknown error
一直重復(fù)這樣的報錯日志,說明它在努力嘗試。
多次嘗試后,就有了異常日志
Warning: remote port forwarding failed for listen port 4000
Warning: remote port forwarding failed for listen port 3389
根據(jù)之前積累的日志中的數(shù)據(jù),發(fā)現(xiàn)就這樣多次嘗試,并且日志報錯提示30、40分鐘后,下一次嘗試就成功了。下面是完整的日志。
client_loop: send disconnect: Connection reset
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: check on child 752
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: ssh exited with error status 255; restarting ssh
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: expired child, returning 1
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: clear alarm timer (404 secs left)
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: checking for grace period, tries = 0
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: starting ssh (count 2)
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: ssh child pid is 753
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: check on child 753
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: clear alarm timer (0 secs left)
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: set alarm for 600 secs
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[753]: child of 751 execing /usr/bin/ssh
ssh: connect to host myhost port 22: Unknown error
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: check on child 753
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: ssh exited with error status 255; restarting ssh
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: expired child, returning 1
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: clear alarm timer (600 secs left)
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: checking for grace period, tries = 1
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: starting ssh (count 3)
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: ssh child pid is 754
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: check on child 754
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: clear alarm timer (0 secs left)
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: set alarm for 600 secs
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[754]: child of 751 execing /usr/bin/ssh
ssh: connect to host myhost port 22: Unknown error
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: check on child 754
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: ssh exited with error status 255; restarting ssh
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: expired child, returning 1
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: clear alarm timer (600 secs left)
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: checking for grace period, tries = 2
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: starting ssh (count 4)
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: ssh child pid is 755
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: check on child 755
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: clear alarm timer (0 secs left)
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: set alarm for 600 secs
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[755]: child of 751 execing /usr/bin/ssh
ssh: connect to host myhost port 22: Unknown error
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: check on child 755
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: ssh exited with error status 255; restarting ssh
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: expired child, returning 1
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: clear alarm timer (600 secs left)
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: checking for grace period, tries = 3
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: starting ssh (count 5)
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: ssh child pid is 756
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: check on child 756
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: clear alarm timer (0 secs left)
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: set alarm for 600 secs
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[756]: child of 751 execing /usr/bin/ssh
ssh: connect to host myhost port 22: Unknown error
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: check on child 756
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: ssh exited with error status 255; restarting ssh
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: expired child, returning 1
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: clear alarm timer (600 secs left)
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: checking for grace period, tries = 4
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: starting ssh (count 6)
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: ssh child pid is 757
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: check on child 757
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: clear alarm timer (0 secs left)
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: set alarm for 600 secs
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[757]: child of 751 execing /usr/bin/ssh
ssh: connect to host myhost port 22: Unknown error
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: check on child 757
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: ssh exited with error status 255; restarting ssh
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: expired child, returning 1
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: clear alarm timer (600 secs left)
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: checking for grace period, tries = 5
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: starting ssh (count 7)
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: ssh child pid is 758
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: check on child 758
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: clear alarm timer (0 secs left)
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: set alarm for 600 secs
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[758]: child of 751 execing /usr/bin/ssh
ssh: connect to host myhost port 22: Unknown error
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: check on child 758
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: ssh exited with error status 255; restarting ssh
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: expired child, returning 1
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: clear alarm timer (600 secs left)
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: checking for grace period, tries = 6
2022/04/16 23:13:29 D:\mySoftWare\Cygwin\bin\autossh[751]: sleeping for grace time 2 secs
2022/04/16 23:13:31 D:\mySoftWare\Cygwin\bin\autossh[751]: starting ssh (count 8)
2022/04/16 23:13:31 D:\mySoftWare\Cygwin\bin\autossh[751]: ssh child pid is 759
2022/04/16 23:13:31 D:\mySoftWare\Cygwin\bin\autossh[751]: check on child 759
2022/04/16 23:13:31 D:\mySoftWare\Cygwin\bin\autossh[751]: clear alarm timer (0 secs left)
2022/04/16 23:13:31 D:\mySoftWare\Cygwin\bin\autossh[751]: set alarm for 600 secs
2022/04/16 23:13:31 D:\mySoftWare\Cygwin\bin\autossh[759]: child of 751 execing /usr/bin/ssh
ssh: connect to host myhost port 22: Unknown error
2022/04/16 23:13:31 D:\mySoftWare\Cygwin\bin\autossh[751]: check on child 759
2022/04/16 23:13:31 D:\mySoftWare\Cygwin\bin\autossh[751]: ssh exited with error status 255; restarting ssh
2022/04/16 23:13:31 D:\mySoftWare\Cygwin\bin\autossh[751]: expired child, returning 1
2022/04/16 23:13:31 D:\mySoftWare\Cygwin\bin\autossh[751]: clear alarm timer (600 secs left)
2022/04/16 23:13:31 D:\mySoftWare\Cygwin\bin\autossh[751]: checking for grace period, tries = 7
2022/04/16 23:13:31 D:\mySoftWare\Cygwin\bin\autossh[751]: sleeping for grace time 8 secs
2022/04/16 23:13:39 D:\mySoftWare\Cygwin\bin\autossh[751]: starting ssh (count 9)
2022/04/16 23:13:39 D:\mySoftWare\Cygwin\bin\autossh[751]: ssh child pid is 760
2022/04/16 23:13:39 D:\mySoftWare\Cygwin\bin\autossh[751]: check on child 760
2022/04/16 23:13:39 D:\mySoftWare\Cygwin\bin\autossh[751]: clear alarm timer (0 secs left)
2022/04/16 23:13:39 D:\mySoftWare\Cygwin\bin\autossh[751]: set alarm for 600 secs
2022/04/16 23:13:39 D:\mySoftWare\Cygwin\bin\autossh[760]: child of 751 execing /usr/bin/ssh
ssh: connect to host myhost port 22: Unknown error
2022/04/16 23:13:39 D:\mySoftWare\Cygwin\bin\autossh[751]: check on child 760
2022/04/16 23:13:39 D:\mySoftWare\Cygwin\bin\autossh[751]: ssh exited with error status 255; restarting ssh
2022/04/16 23:13:39 D:\mySoftWare\Cygwin\bin\autossh[751]: expired child, returning 1
2022/04/16 23:13:39 D:\mySoftWare\Cygwin\bin\autossh[751]: clear alarm timer (600 secs left)
2022/04/16 23:13:39 D:\mySoftWare\Cygwin\bin\autossh[751]: checking for grace period, tries = 8
2022/04/16 23:13:39 D:\mySoftWare\Cygwin\bin\autossh[751]: sleeping for grace time 18 secs
2022/04/16 23:13:57 D:\mySoftWare\Cygwin\bin\autossh[751]: starting ssh (count 10)
2022/04/16 23:13:57 D:\mySoftWare\Cygwin\bin\autossh[751]: ssh child pid is 761
2022/04/16 23:13:57 D:\mySoftWare\Cygwin\bin\autossh[751]: check on child 761
2022/04/16 23:13:57 D:\mySoftWare\Cygwin\bin\autossh[751]: clear alarm timer (0 secs left)
2022/04/16 23:13:57 D:\mySoftWare\Cygwin\bin\autossh[751]: set alarm for 600 secs
2022/04/16 23:13:57 D:\mySoftWare\Cygwin\bin\autossh[761]: child of 751 execing /usr/bin/ssh
ssh: connect to host myhost port 22: Unknown error
2022/04/16 23:13:57 D:\mySoftWare\Cygwin\bin\autossh[751]: check on child 761
2022/04/16 23:13:57 D:\mySoftWare\Cygwin\bin\autossh[751]: ssh exited with error status 255; restarting ssh
2022/04/16 23:13:57 D:\mySoftWare\Cygwin\bin\autossh[751]: expired child, returning 1
2022/04/16 23:13:57 D:\mySoftWare\Cygwin\bin\autossh[751]: clear alarm timer (600 secs left)
2022/04/16 23:13:57 D:\mySoftWare\Cygwin\bin\autossh[751]: checking for grace period, tries = 9
2022/04/16 23:13:57 D:\mySoftWare\Cygwin\bin\autossh[751]: sleeping for grace time 32 secs
2022/04/16 23:14:29 D:\mySoftWare\Cygwin\bin\autossh[751]: starting ssh (count 11)
2022/04/16 23:14:29 D:\mySoftWare\Cygwin\bin\autossh[751]: ssh child pid is 762
2022/04/16 23:14:29 D:\mySoftWare\Cygwin\bin\autossh[751]: check on child 762
2022/04/16 23:14:29 D:\mySoftWare\Cygwin\bin\autossh[751]: clear alarm timer (0 secs left)
2022/04/16 23:14:29 D:\mySoftWare\Cygwin\bin\autossh[751]: set alarm for 600 secs
2022/04/16 23:14:29 D:\mySoftWare\Cygwin\bin\autossh[762]: child of 751 execing /usr/bin/ssh
Warning: remote port forwarding failed for listen port 4000
Warning: remote port forwarding failed for listen port 3389
2022/04/16 23:24:29 D:\mySoftWare\Cygwin\bin\autossh[751]: received SIGALRM (end-of-life 0)
2022/04/16 23:24:44 D:\mySoftWare\Cygwin\bin\autossh[751]: timeout polling to accept read connection
2022/04/16 23:24:44 D:\mySoftWare\Cygwin\bin\autossh[751]: port down, restarting ssh
2022/04/16 23:24:44 D:\mySoftWare\Cygwin\bin\autossh[751]: clear alarm timer (0 secs left)
2022/04/16 23:24:44 D:\mySoftWare\Cygwin\bin\autossh[751]: checking for grace period, tries = 0
2022/04/16 23:24:44 D:\mySoftWare\Cygwin\bin\autossh[751]: starting ssh (count 12)
2022/04/16 23:24:44 D:\mySoftWare\Cygwin\bin\autossh[751]: ssh child pid is 763
2022/04/16 23:24:44 D:\mySoftWare\Cygwin\bin\autossh[751]: check on child 763
2022/04/16 23:24:44 D:\mySoftWare\Cygwin\bin\autossh[751]: clear alarm timer (0 secs left)
2022/04/16 23:24:44 D:\mySoftWare\Cygwin\bin\autossh[751]: set alarm for 600 secs
2022/04/16 23:24:44 D:\mySoftWare\Cygwin\bin\autossh[763]: child of 751 execing /usr/bin/ssh
Warning: remote port forwarding failed for listen port 4000
Warning: remote port forwarding failed for listen port 3389
channel 2: open failed: connect failed: Connection refused
eceived SIGALRM (end-of-life 0)
2022/04/16 23:35:00 D:\mySoftWare\Cygwin\bin\autossh[751]: timeout polling to accept read connection
2022/04/16 23:35:00 D:\mySoftWare\Cygwin\bin\autossh[751]: port down, restarting ssh 這時候可以遠程連接了
2022/04/16 23:35:00 D:\mySoftWare\Cygwin\bin\autossh[751]: clear alarm timer (0 secs left)
2022/04/16 23:35:00 D:\mySoftWare\Cygwin\bin\autossh[751]: checking for grace period, tries = 0
2022/04/16 23:35:00 D:\mySoftWare\Cygwin\bin\autossh[751]: starting ssh (count 13)
2022/04/16 23:35:00 D:\mySoftWare\Cygwin\bin\autossh[751]: ssh child pid is 764
2022/04/16 23:35:00 D:\mySoftWare\Cygwin\bin\autossh[751]: check on child 764
2022/04/16 23:35:00 D:\mySoftWare\Cygwin\bin\autossh[751]: clear alarm timer (0 secs left)
2022/04/16 23:35:00 D:\mySoftWare\Cygwin\bin\autossh[751]: set alarm for 600 secs
2022/04/16 23:35:00 D:\mySoftWare\Cygwin\bin\autossh[764]: child of 751 execing /usr/bin/ssh
2022/04/16 23:45:00 D:\mySoftWare\Cygwin\bin\autossh[751]: received SIGALRM (end-of-life 0)
2022/04/16 23:45:00 D:\mySoftWare\Cygwin\bin\autossh[751]: connection ok
2022/04/16 23:45:00 D:\mySoftWare\Cygwin\bin\autossh[751]: check on child 764
2022/04/16 23:45:00 D:\mySoftWare\Cygwin\bin\autossh[751]: clear alarm timer (0 secs left)
2022/04/16 23:45:00 D:\mySoftWare\Cygwin\bin\autossh[751]: set alarm for 600 secs
4 驗證網(wǎng)絡(luò)波動 - 斷網(wǎng) -> 聯(lián)網(wǎng) -> 周期性任務(wù)
對應(yīng)斷網(wǎng)在3分鐘內(nèi)快速恢復(fù)的情況。
斷掉網(wǎng)絡(luò)連接,然后快速進行網(wǎng)絡(luò)連接。模擬網(wǎng)絡(luò)故障然后快速恢復(fù)的情況。
此時周期性的任務(wù)不要被觸發(fā)執(zhí)行,根據(jù)周期性任務(wù)的配置,是從每天的00:00:05秒開始每隔5分鐘執(zhí)行一次,因此只要掌握好斷網(wǎng)的時間點就可以。
同時需要觀察在 /var/log/autossh.log 中沒有異常日志打印。
此時,經(jīng)過驗證,網(wǎng)絡(luò)恢復(fù)后可以正常遠程訪問,在Cygwin的/var/log/AutoSSH.log中也沒有看到異常日志。
問題
上面根據(jù)斷網(wǎng)時長分為了3類:0 ~ 3分鐘,3 ~ 5分鐘,超過5分鐘。
其中斷網(wǎng) 3 ~ 5 分鐘的情況等待的時間最長。是因為斷網(wǎng) 3 ~ 5 分鐘,有可能周期性任務(wù)沒有被觸發(fā),從而無法感知到本次斷網(wǎng),就無法主動進行重啟操作。只能依賴autossh的自動重連機制。而這個重連機制,經(jīng)過測試,大約需要30 ~ 40分鐘才會確認連接不可用,進行重新連接。所以,運氣不好的情況下,可能家中的網(wǎng)絡(luò)早已恢復(fù),但是我們在外地還需要30 ~ 40分鐘后,等待autossh重新建立新連接后,才能連接上。
改進
針對這個問題,有一個改進的方案:
我們在外地,無法干預(yù)家中的電腦,但是可以干預(yù)云服務(wù)器。
經(jīng)過測試發(fā)現(xiàn),在家中電腦有網(wǎng)絡(luò)的情況下,無論當(dāng)前遠程訪問可不可用,如果手動執(zhí)行云服務(wù)器上的 kill_old_remote_process.sh 腳本。autossh下一次嘗試時,在 Cygwin 的 /var/log/AutoSSH.log 文件中可以看到日志:
channel 2: open failed: connect failed: Connection refused
eceived SIGALRM (end-of-life 0)
2022/04/17 00:27:45 D:\mySoftWare\Cygwin\bin\autossh[751]: timeout polling to accept read connection
2022/04/17 00:27:45 D:\mySoftWare\Cygwin\bin\autossh[751]: port down, restarting ssh
2022/04/17 00:27:45 D:\mySoftWare\Cygwin\bin\autossh[751]: clear alarm timer (0 secs left)
2022/04/17 00:27:45 D:\mySoftWare\Cygwin\bin\autossh[751]: checking for grace period, tries = 0
2022/04/17 00:27:45 D:\mySoftWare\Cygwin\bin\autossh[751]: starting ssh (count 23)
2022/04/17 00:27:45 D:\mySoftWare\Cygwin\bin\autossh[751]: ssh child pid is 785
2022/04/17 00:27:45 D:\mySoftWare\Cygwin\bin\autossh[751]: check on child 785
2022/04/17 00:27:45 D:\mySoftWare\Cygwin\bin\autossh[751]: clear alarm timer (0 secs left)
2022/04/17 00:27:45 D:\mySoftWare\Cygwin\bin\autossh[751]: set alarm for 600 secs
2022/04/17 00:27:45 D:\mySoftWare\Cygwin\bin\autossh[785]: child of 751 execing /usr/bin/ssh
可以發(fā)現(xiàn),autossh知道該連接不可用了,直接新建一個連接。節(jié)省了后續(xù)autossh超時重試的時間。
這樣,我們在外地,發(fā)現(xiàn)遠程訪問超過5分鐘無法成功??梢試L試登錄云服務(wù)器。手動執(zhí)行 kill_old_remote_process.sh 腳本,然后等待并重試即可。
在電腦肯定開機的前提下,我們在外地嘗試多次,超過5分鐘都無法遠程訪問,那么原因只有2個:
1 斷網(wǎng)超過5分鐘,目前仍然沒有恢復(fù)
2 斷網(wǎng)3 ~ 5分鐘,家庭網(wǎng)絡(luò)恢復(fù)了,但是因為autossh的超時重試機制需要30 ~ 40分鐘,因此目前仍然不能訪問。
此時,我們在云服務(wù)器手動執(zhí)行 kill_old_remote_process.sh 腳本,分別對其的影響是:
1 斷網(wǎng)超過5分鐘的情況:沒有任何影響。
因為斷網(wǎng)超過5分鐘,周期性任務(wù)肯定是感知到斷網(wǎng)的情況了,不管我們現(xiàn)在有沒有手動執(zhí)行云服務(wù)器的腳本,等后面來網(wǎng)了之后,周期性任務(wù)也會執(zhí)行windows腳本刪除云服務(wù)器上的進程。
這種情況下,即便我們手動執(zhí)行云服務(wù)器的腳本,也不會恢復(fù)和遠程訪問。需等待家庭的網(wǎng)絡(luò)恢復(fù),然后運行下一次周期性任務(wù)時,會發(fā)現(xiàn)網(wǎng)絡(luò)由壞變好了,就會重啟服務(wù)。
2 斷網(wǎng)3~5分鐘的情況:可以幫助快速恢復(fù)。
因為此時家庭有網(wǎng)了,只是autossh的超時重連機制導(dǎo)致沒有立即重連。所以我們手動在云服務(wù)器執(zhí)行腳本刪除進程,等下一次autossh嘗試時,就會放棄重試,而是新建立連接。
這樣就不用等待30~40分鐘,而是等待下一次autossh的連接嘗試,即可恢復(fù)。
總結(jié)
經(jīng)過上面的配置之后。只要提前把家里的電腦插上電開機。就會在啟動且聯(lián)網(wǎng)后(即便不登陸任何用戶)提供遠程訪問的能力。
如果在外地遠程訪問連續(xù)超過5分鐘都無法連上網(wǎng)。就登錄云服務(wù)器,手動執(zhí)行 kill_old_remote_process.sh 腳本。然后等待一段時間后就可以進行遠程訪問了。
如果是真的長時間斷網(wǎng),那么等待的時間很長,需要家中來網(wǎng)了,且下一次周期性任務(wù)執(zhí)行后,才可以遠程訪問。最長的等待時間是:等待家中來網(wǎng)的時間+5分鐘(周期性任務(wù)的執(zhí)行周期),最短的等待時間是:等待家中來網(wǎng)的時間(周期性任務(wù)的執(zhí)行時間點正好卡在來網(wǎng)的時候執(zhí)行了)
如果是家里已經(jīng)來網(wǎng)了,那就是autossh超時重連機制造成的無法遠程訪問,我們手工執(zhí)行腳本后,需要等待下一次autossh嘗試連接,根據(jù)日志總結(jié)的經(jīng)驗,最長需要等待10分鐘才能等來autossh下一次嘗試。最短就立即生效了(刪除后,正好autossh嘗試重連,就直接去建立新連接了。)