こんにちは、インフラエンジニアのryuです。
今回は、Telnetコマンドの使い方を解説します。
Telnetと聞くと、遠隔からサーバーを操作するコマンドというイメージがあるかもしれません。
確かに、以前はサーバーやネットワーク機器へのリモート接続に使われていました。しかし、Telnetの通信は暗号化されないため、現在の遠隔操作ではSSHを使うのが基本です。
では、Telnetはもう使わないのでしょうか。
実務では、サーバーのTCPポートに接続できるか確認する方法として使うことがあります。
この記事では、Telnetコマンドの基本から、接続できないときの確認方法まで初心者向けに解説します。
Telnetとは?¶
Telnetは、ネットワークを通して別のコンピューターと文字情報をやり取りするための仕組みです。
Telnetには、主に以下の2つの使い方があります。
| 使い方 | 現在の考え方 |
|---|---|
| サーバーやルーターへの遠隔接続 | 通信が暗号化されないため、基本的にはSSHを使う |
| TCPポートの接続確認 | トラブル調査で使うことがある |
例えば、Webサーバーの80番ポートや、メールサーバーの25番ポートに接続できるか確認できます。
ただし、Telnetで接続できたからといって、サービスがすべて正常に動いているとは限りません。
あくまで、指定したホストのTCPポートまで接続できたかを確認する方法です。
Telnetコマンドの基本的な使い方¶
Telnetコマンドは、接続先のホスト名またはIPアドレスを指定して実行します。
telnet 192.168.1.10
ポート番号を確認したい場合は、接続先の後ろにポート番号を指定します。
telnet 192.168.1.10 80
基本的な書式は以下の通りです。
telnet 接続先 ポート番号
IPアドレスではなく、ホスト名やドメイン名も指定できます。
telnet example.com 80
ポート番号の意味が分からない方は、ポート番号とは?コマンドを打ちながら実践的に理解するも参考にしてください。
TelnetでWebサーバーへ接続してみる¶
まずは、Webサーバーで使われる80番ポートへ接続してみましょう。
telnet example.com 80
接続に成功すると、環境によっては画面が何も表示されない状態になります。
何も表示されないと失敗したように見えますが、TCP接続が成功して入力待ちになっている可能性があります。
HTTPの通信を確認したい場合は、接続後に以下を入力します。
GET / HTTP/1.1
Host: example.com
Hostの行を入力したあと、もう一度Enterを押して空行を送信します。
WebサーバーからHTTPヘッダーやHTMLが返ってくれば、80番ポートの先でHTTPサーバーが応答しています。
HTTPSの確認にはcurlを使う¶
HTTPSでは、HTTPの前にTLSによる暗号化通信が行われます。
TelnetはTLS通信を処理できないため、443番ポートへ接続できても、Webページの内容までは正しく確認できません。
HTTPSを確認するときは、curlを使う方が分かりやすいです。
curl -I https://example.com/
TelnetはTCPポートの接続確認、curlはHTTP・HTTPSの応答確認と使い分けましょう。
WindowsでTelnetを使えるようにする¶
Windowsでは、Telnetクライアントが無効になっていることがあります。
コマンドプロンプトでTelnetを実行したときに、以下のエラーが表示される場合です。
'telnet' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
この場合は、Windowsのオプション機能からTelnetクライアントを有効にします。
コントロールパネルから、以下の順番で開きます。
プログラム
→ Windowsの機能の有効化または無効化
→ Telnet Client
Telnet Clientにチェックを入れたら、OKを押します。
管理者としてコマンドプロンプトを起動し、以下のコマンドで有効にすることもできます。
dism /online /Enable-Feature /FeatureName:TelnetClient
インストール後に新しいコマンドプロンプトを開き、Telnetを実行してみましょう。
LinuxでTelnetをインストールする¶
Linuxでも、Telnetクライアントが最初から入っているとは限りません。
UbuntuやDebian系では、以下のコマンドでインストールできます。
sudo apt update
sudo apt install telnet
Fedoraなどの環境では、以下のようにインストールします。
sudo dnf install telnet
インストールできたら、バージョンやヘルプを確認してみましょう。
telnet --help
Telnetをインストールできない環境では、後ほど紹介するncやcurlでも接続確認ができます。
Telnetを終了する方法¶
接続中に通常のコマンド入力へ戻れなくなることがあります。
Telnetの操作画面へ戻るには、一般的にCtrlと]を同時に押します。
Ctrl + ]
telnet>と表示されたら、quitを入力します。
telnet> quit
元記事ではCtrl + Cで終了すると説明していましたが、Telnetクライアントのコマンドモードへ移動するときはCtrl + ]を使います。
Telnetの結果はどう見ればよい?¶
Telnetの結果は、主に以下のように判断します。
| 結果 | 考えられる状態 |
|---|---|
| 接続メッセージや空の画面になる | TCP接続に成功した可能性が高い |
| Connection refused | 接続先には到達したが、サービスが待ち受けていない可能性がある |
| 接続がタイムアウトする | 通信経路やファイアウォールで遮断されている可能性がある |
| ホスト名を解決できない | DNSやホスト名の指定を確認する |
接続成功は、アプリケーション全体の正常動作を保証するものではありません。
例えば80番ポートへ接続できても、Webサーバーが正しいページを返せるかは別に確認する必要があります。
Telnetで接続できないときの確認方法¶
Telnetで接続できないときは、順番に原因を切り分けます。
接続先を間違えていないか確認する¶
最初に、IPアドレス、ホスト名、ポート番号を確認します。
telnet 192.168.1.10 80
80番と8080番など、似たポート番号を間違えていることもあります。
pingで通信経路を確認する¶
次に、pingで接続先へ通信できるか確認します。
ping 192.168.1.10
ただし、pingに応答しないよう設定されているサーバーもあります。
pingが失敗しただけで、サーバーが停止しているとは限りません。
pingコマンドについては、pingコマンドの使い方と通信確認の方法で解説しています。
サーバーがポートを待ち受けているか確認する¶
サーバーへログインできる場合は、ssコマンドで待受ポートを確認します。
sudo ss -lnt
80番ポートを確認するなら、grepで絞り込みます。
sudo ss -lnt | grep ':80'
何も表示されない場合は、Webサーバーが起動していない、または別のポートで待ち受けている可能性があります。
ファイアウォールを確認する¶
サーバーがポートを待ち受けていても、ファイアウォールやクラウドのセキュリティ設定で遮断されることがあります。
Linuxのファイアウォールだけでなく、ルーター、AWSのセキュリティグループ、社内ネットワークのアクセス制御も確認しましょう。
Telnet以外の確認方法¶
現在は、目的に合わせて別のコマンドを使うことも増えています。
| 目的 | コマンド |
|---|---|
| WindowsでTCPポートを確認 | Test-NetConnection |
| LinuxでTCPポートを確認 | nc |
| HTTP・HTTPSを確認 | curl |
| サーバーへ安全に遠隔接続 | ssh |
Windows PowerShellでは、以下のように確認できます。
Test-NetConnection example.com -Port 80
Linuxでncが使える場合は、以下のように実行します。
nc -vz example.com 80
サーバーへログインして操作したい場合は、TelnetではなくSSHを使います。
ssh user@192.168.1.10
TelnetをすべてSSHに置き換えるというより、目的に合ったコマンドを選ぶことが大切です。
Telnetコマンドの使い方まとめ¶
今回は、Telnetコマンドの使い方を解説しました。
基本的な書式は以下の通りです。
telnet 接続先 ポート番号
Telnetは、以前はサーバーやネットワーク機器の遠隔操作にも使われていました。
しかし、通信が暗号化されないため、遠隔操作にはSSHを使うのが基本です。
現在は、TCPポートへ接続できるか確認するときに使うことがあります。
私もネットワークのトラブルを調査するときは、いきなり設定を変更するのではなく、接続先、通信経路、待受ポート、ファイアウォールの順番で確認します。
Telnetは、その中の接続確認に使う1つの道具です。
コマンドだけを覚えるのではなく、Telnetで何を確認できて、何を確認できないのかまで理解しておきましょう。
ネットワークを実際に構築しながら学びたい方へ¶
Telnetの使い方が分かっても、IPアドレス、ポート番号、ルーティング、ファイアウォールの関係が分からないと、接続できない原因を判断するのは難しいです。
InfraAcademyでは、Packet Tracerなどを使ってネットワークを構築しながら学習できます。