私はサーバーリストを実行し、SSHポートが開いていることを確認する非常に基本的なスクリプトを作成しようとしていますnc
。私はいくつかの他のことを試しましたが、うまく動作しないようです。私はどんな種類のスクリプトでもうまくいきません。
ここにスクリプトがあります。nc
.txtのコマンドに応答して「成功」が確認されたら、それを実行したいと思います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に開いているポートがありません」と表示されます。
どんな指針でもありがとうございます。
ベストアンサー1
コメント、コメントが長すぎます。
server.txt
server-list
名前を付けたり、したい場合はservers.txt
良いでしょう。避け、同様の小文字の変数名を使用し、ホスト名を使用するかIPを使用するかは不明であるため、とにかく名前を付けることをお勧めします
SERVER
。server_ip
整数以外の変数はすべて二重引用符で囲みます
"$server_ip"
。blackhole()変数にリダイレクトする
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