Shell-Script
在檢查開放 22 埠的 BASH 腳本中的 WHILE 循環中失敗 IF
我試圖創建一個相當基本的腳本來執行伺服器列表並檢查 SSH 埠是否使用
nc
. 我嘗試了幾種不同的方法,但似乎無法讓它發揮作用。我絕對不擅長任何類型的腳本。這是腳本。我只是希望它
nc
在OPEN
.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 上沒有開放埠”。
我感謝您的任何指導。
註釋,太長了,無法評論。
server.txt
最好是命名server-list
或servers.txt
如果你願意。- 使用小寫變數名,如、避免等,無論如何
SERVER
都可以更好地命名server_ip
,因為不清楚您使用的是主機名還是 IP。- 雙引號所有非整數變數,如
"$server_ip"
.- 使用直接
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