考えるべきもう少しの食べ物:nmapまたはncを使用し、pingはしないでください。
ping:なぜpingを使用しないのですか?(1)システムとポートを同時にチェックすることをお勧めします。(2)icmpエコーは多くの状況でブロックされるため、Pingは信頼できません。
Nmap:これは非常に高速で信頼性がありますが、nmapをインストールする必要があります。推奨される方法NMAP(ex host ip 127.0.0.1):
nmap 127.0.0.1 -PN -p ssh | grep open
Nc: ncは通常、すでにインストールされていますが、Mac OS Xなどの一部のシステムでは、到達不能なシステムでコマンドがハングします。(回避策を参照)
nc -v -z -w 3 127.0.0.1 22 &> /dev/null && echo "Online" || echo "Offline"
Mac OSXの回避策:
bash -c '(sleep 3; kill $$) & exec nc -z 127.0.0.1 22' &> /dev/null
echo $?
0
bash -c '(sleep 3; kill $$) & exec nc -z 1.2.3.4 22' &> /dev/null
echo $?
143
(例は、良いホストと悪いホストの例でポート22 sshに接続する方法を示しています。$?を使用して、スリープ時間が3秒でホストに到達したかどうかを判断します)
Macユーザー(主に)などの場合、次のようにスクリプトでコマンドを使用できます。
# -- use NMAP, if not avail. go with nc --
if command -v nmap | grep -iq nmap ; then
nmap ${ip} -PN -p ${ssh_port} | grep -iq "open"
res=$?
elif command -v nc | grep -iq nc ; then
# -- run command if fails to complete in 3 secs assume host unreachable --
( nc -z ${ip} ${ssh_port} ) & pid=$!
( sleep 3 && kill -HUP $pid ) 2>/dev/null & watcher=$!
if wait $pid 2>/dev/null; then
pkill -HUP -P $watcher
wait $watcher
# -- command finished (we have connection) --
res=0
else
# -- command failed (no connection) --
res=1
fi
else
echo "Error: You must have NC or NMAP installed"
fi
if [[ ${res} -lt 1 ]] ;then
success=1
echo "testing => $ip SUCCESS connection over port ${ssh_port}"
break;
else
echo "testing => $ip FAILED connection over port ${ssh_port}"
fi