Linux
SSH
netcat
ping

[Linux] sshの接続前に確認を行う(port番号を指定しての特定IPの疎通確認)

More than 1 year has passed since last update.

目的

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