近一段時間,工作中不止一次遇到這樣的情況:
用戶反映有Windows設備(暫命名爲A)無法RDP遠程登錄,登錄到同網段的設備(暫命名爲B),發現可以從B設備 ping 通 A設備,嘗試 telnet A 3389, 也有返回的字符串,但是真正用mstsc登錄的時候,就是連不上。
經過觀察,發現了這樣的一個情況:
使用同網段的另一臺設備(暫命名爲C),這是一臺Linux設備。
首先嚐試 telnet B 3389, 有正常返回,需要使用 ^] 退出。
之後繼續 telnet A 3389,有正常返回,但是即刻在返回的最後一行出現:Connection closed by foreign host 字樣。
經過確認,是設備的RDP服務已經宕了,但是端口還在監聽,而且還有看似正常的響應。
爲了應對這樣的情況,經過查閱資料和多次嘗試,目前看可以使用這樣的命令進行檢測:
#! /bin/bash
file=`mktemp`
timeout 5s telnet 127.0.0.1 22 > $file
grep "Connection closed" $file | wc -l
rm -rf $file
原理是,使 telnet 運行很短的時間,並輸出到臨時文件,然後看文件中是否有即刻連接失敗的返回。