Shell-Script

在檢查開放 22 埠的 BASH 腳本中的 WHILE 循環中失敗 IF

  • April 8, 2022

我試圖創建一個相當基本的腳本來執行伺服器列表並檢查 SSH 埠是否使用nc. 我嘗試了幾種不同的方法,但似乎無法讓它發揮作用。我絕對不擅長任何類型的腳本。

這是腳本。我只是希望它ncOPEN.

while read SERVER
do
OPEN=$(nc -z -v -w5 $SERVER 22)
echo $SERVER
  if [[ $OPEN = *"suc"* ]];
   then
       echo "Found SSH open on $SERVER"
   else
       echo "No open ports on $SERVER!"    
  fi
done < server.txt

伺服器列表位於server.txt腳本末尾引用的文件中。

這是我得到的回應。我不

nc: connect to 10.10.51.55 port 22 (tcp) failed: No route to host
10.10.51.55
No open ports on test1!
Connection to 10.10.51.65 22 port [tcp/ssh] succeeded!
10.10.50.65
No open ports in test2!

無論如何,它都會給我“$SERVER 上沒有開放埠”。

我感謝您的任何指導。

註釋,太長了,無法評論。

  1. server.txt最好是命名server-listservers.txt如果你願意。
  2. 使用小寫變數名,如、避免等,無論如何SERVER都可以更好地命名server_ip,因為不清楚您使用的是主機名還是 IP。
  3. 雙引號所有非整數變數,如"$server_ip".
  4. 使用直接if語句而不是變數$OPEN來重定向到黑洞 ( /dev/null)。

根據以上重寫:

#!/bin/sh

while read -r server_ip; do

   if nc -z -v -w5 "$server_ip" 22 >/dev/null 2>&1; then
       echo "Found SSH port open on $server_ip."
   else
       echo "Did not find open SSH port on $server_ip." >&2
   fi

done < server-list

引用自:https://unix.stackexchange.com/questions/443103