目的
ping
で確認した後にsshで接続をするとハングして返ってこない場合があったので、それを回避したい。
ping
ではポートを指定できないため nc (netcat)
を使って確認を行う。
確認方法
nc (netcat) を使用する。このツールはいろんな用途に使えるが、今回は以下のようにする。
$ nc -v -w 1 <IP address> -z <port>
実行例
# 成功
$ nc -v -w 1 192.168.X.XXX -z 22
Connection to 192.168.X.XXX 22 port [tcp/ssh] succeeded!
$ echo $?
0
# 失敗
$ nc -v -w 1 192.168.X.XXX -z 322
nc: connect to 192.168.X.XXX port 322 (tcp) timed out: Operation now in progress
$ echo $?
1
成功/失敗ステータスを使えばスクリプトにも組み込める。
その他の方法としては、nmap
, paping
, telnet
等が使えるらしい(未検証)
linux - Is it possible to ping an address:port? - Super User
参考
bash - why can I ping a server but not connect via ssh? - Stack Overflow
linux - centosの22番ポートが開いているかどうか外部から確認する方法 - スタック・オーバーフロー
nc コマンド 使い方メモ - Qiita