この記事では、サーバ疎通・ネットワークの状態確認および、サーバ遠隔操作の手段として、
ping, traceroute, curl, telnet, sshという5つのLinuxコマンドの各特長を整理し、
違いを確認していきたい。
もくじ
■ping
◎概要
通信相手先コンピュータやサーバに、TPパケットを送って、その返答有無を確認する。
ICMP(Internet Control Message Protocol ※詳細後述)の、ノード間通信状態問い合わせ機能を利用したコマンド。
エンジニア業務をしていると、「pingが通る」、「通らない」といった言葉をよく耳にする。
「pingが通る」とは、相手先サーバに対してpingコマンドを実行し、返答が返ってくること、
逆に「通らない」とは、返答が返ってこないことを指す。
通信相手先とうまく通信できない時に、まず状況把握として「pingが通るかどうか」を確認することは、実際の業務で頻繁に行われている。
なお、返答が返ってこない場合、以下のような問題が考えられる。
・相手先サーバが落ちている(=死んでいる)
・自サーバがネットワークにつながっていない
・相手先と自サーバとの間のネットワークに何かの問題がある
・IPパケットでの通信が禁止されている
など。
「pingが通らない」ことの原因は多岐にわたるため、詳しく状態を確認する必要がある。
確認方法も状況によりけりだが、流れの例として以下の記事が非常に参考になったので、リンクだけ置かせて頂く。
◎例
ping 192.168.0.1
→IPアドレスが192.168.0.1のコンピュータまたはサーバに対し、pingが通るかどうかを確認する。
◎特筆事項
相手先サーバのポート番号の状態は、pingコマンドからでは分からない。
そのため、宛先ポートが開いているかどうかを確認したい場合は、nc(netcat)コマンドなどを別途実行する必要がある。
■nc(netcat)
◎概要
TCPまたはUDPを利用したデータ通信の、状況確認が可能なコマンドラインツール。
対象コンピュータまたはサーバの、HTTPレスポンスのヘッダ内容確認や、
自サーバのポートを一時開放しての接続待ち受け、
ファイル転送などなど、
ncを用いてできることは多岐にわたる。
さらに、オプション付与により、相手先サーバの、ポート番号の状態(ポートが開いているかどうか)を確認することも可能。
前出のpingコマンドでは、IPパケット送信による疎通確認を行えるものの、ポート番号の状態確認はできなかった。そのため、ポート番号状態を確認する手段としても、ncコマンドはよく使われる。
◎例
①nc 192.168.0.1 1234
→IPアドレスが192.168.0.1のコンピュータまたはサーバの、ポート番号1234に接続を試みる。
接続できれば、対話形式で、接続状況などを詳細確認することが可能。
②nc -v -w 1 192.168.0.1 -z 80
→IPアドレスが192.168.0.1のコンピュータまたはサーバの、ポート番号80に接続できるかどうかを確認する。
◎特筆事項
ポートスキャンについては、自社で構築中のネットワークなどの、プライベートな環境でのポート番号状況を知りたい時に活用すること。
というのも、外部サイトに対してコマンドを発行すると、ポート番号状態による脆弱性を調査する、セキュリティ攻撃準備だとみなされる可能性があるためである。
その他、ncコマンドについてとても丁寧に説明されている記事があったので、例によってリンクを置かせて頂く。
■curl
◎概要
HTTPやHTTPSの他、FTP、IMAPなどの様々なプロトコルを用いて、URLで指定したコンピュータやサーバとデータ通信を行える。
サーバ疎通確認観点から説明するなら、
対象サーバのIPアドレスとプロトコルを指定してコマンドを発行すれば、疎通可否を確認することに使える。
◎例
①curl 192.168.0.1:8080
→IPアドレスが192.168.0.1のコンピュータまたはサーバに、ポート番号8080で疎通を試みる。
②curl https://www.google.com/
→Googleにアクセスする。
(HTTPSを用いて、指定URL(Google)にリクエストデータ送信→結果データ(Googleのページ)が返される)
◎特筆事項
curlコマンドは、疎通確認としての利用や、FTPなどのプロトコル利用よりも、
HTTP/HTTPSによる外部サイトなどへのアクセスに利用する使い方が最もメジャーだと思われる。(例②の使い方)
とはいえ、疎通確認時に「IPアドレスとポート番号」を指定できることから、「IPアドレス」のみによる疎通を試みるpingコマンドと合わせて、疎通確認手段としても持っておきたいところ。
■telnet
◎概要
他のコンピュータやサーバに遠隔でログインし、操作するためのコマンド。
ログイン先のコンピュータやサーバは、IPアドレスまたはホスト名によって指定する。
なお、「-l(エル)」オプションで、ログイン時のユーザを指定することも可能。
基本的に、ログイン時にはパスワードが必要となる。
◎例
telnet 192.168.0.1
→IPアドレスが192.168.0.1のコンピュータまたはサーバに遠隔ログインする。
◎特筆事項
宛先ポート番号(遠隔ログイン先のコンピュータやサーバのポート番号)は、23を利用する。well-knownポートの1つ。
ログイン時のパスワード含め、すべての操作は暗号化されず、安全性が低い。
次に紹介するsshコマンドは、telnetと同じことができる一方、通信も暗号化されるので、
telnetではなくsshコマンドを使うのが一般的。
■ssh
◎概要
他のコンピュータやサーバに遠隔でログインし、操作するためのコマンド。
ログイン先のコンピュータやサーバは、IPアドレスまたはホスト名によって指定する。
前述のtelnetコマンドと異なり、通信内容がRSAにて暗号化される。
(RSAって何?って人は、ごめんなさい、ググってください)
なお、「-l(エル)」オプションで、ログイン時のユーザを指定することも可能。
基本的に、ログイン時にはパスワードが必要となる。
◎例
ssh 192.168.0.1 -l testuser
→IPアドレスが192.168.0.1のコンピュータまたはサーバに遠隔ログインする。
その際、「testuser」というユーザーでログインする。
◎特筆事項
・宛先ポート番号(遠隔ログイン先のコンピュータやサーバのポート番号)は、22を利用する。well-knownポートの1つ。
・sshを用いてのログインには、通常パスワードが必要となる。
だが実運用ではパスワードをいちいち入力するのは面倒なので、公開鍵と秘密鍵を利用して、パスワードの入力を省く方法もある。
詳細については、ここでは長くなるので、別途記事にしたい。(※ググれば記事はいっぱい出てきます)
今回は以上。