古いネットワーク機器のトラブルシューティングやネットワークプロトコルの学習などのために、「Telnet」コマンドを使って直接サーバに接続する際に必要なインストール手順、ポート名の指定、Telnetのコマンドモード、漢字コードの設定方法などを解説する。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
対象OS:Windows 10/Windows 11、Windows Server 2012/Windows Server 2012 R2/Windows Server 2016/Windows Server 2022
※会員登録(無料)をすると、🔒の付いているセクションを読むことができます。
「Telnet」は、古くから管理作業などを行うためにネットワーク経由でリモートのマシンへ「Telnetプロトコル」(→プロトコル規格書)でログインする場合に、しばしば用いられてきたツールである。ただ、現在では通信を暗号化できるSSHで代替されることがほとんどだ。
それでも、古いネットワーク機器や組み込み系システムのトラブルシューティングやデバッグでは、Telnetクライアントプログラムを使う機会も残っている。
またTelnetでは、基本的には単純な文字コードでしか通信ができないが故に、ネットワークプロトコルにおける、プリミティブな(基本的な)コマンドやデータ、ステータスなどのやりとりを調べやすい。プロトコルを学ぶのにも意外と便利だ(ネットワークモニターの方が万能ではあるが)。
実は、最新のWindows OSにもTelnetクライアントプログラムはいまだ標準で付属している。本Tech TIPSでは、Windows OS標準のTelnetクライアントのインストール方法とTelnetの基本的な使い方を紹介する。
なお、Telnetには標準的な暗号化機能がなく、通信内容の盗聴や改ざん、通信先のなりすましなどに対して脆弱(ぜいじゃく)なプロトコルと言わざるを得ない。利用する際には、Telnetサーバ/クライアント間の通信を他のセキュリティ機器・機能で保護するなど対策をしていただきたい。
Windows OSのTelnetのクライアントプログラムはデフォルトではインストールされていない。ユーザーが必要に応じて機能を追加する必要がある。
Windows 10/11を含むWindowsクライアントOSの場合、Telnetクライアントはコントロールパネルからインストールできる。コントロールパネルの起動方法は以下のTech TIPSを参照してほしい。
Windows 10なら[Windowsの設定]アプリ、Windows 11なら[設定]アプリからのインストールも可能だ。以下のように操作すると、上記の[Windowsの機能]ダイアログを開くことができる。
Windows Serverの場合、Telnetクライアントはサーバーマネージャーからインストールできる。
なおTelnetのサーバ機能(リモートからログインしてコマンドプロンプトを使わせる機能)は、Windows 10およびWindows Server 2016以降では廃止され、インストールできなくなっている(Telnetのクライアント機能のみ利用可能)。
Telnetの一番基本的な使い方は、コマンドプロンプトを起動して、そこで接続先サーバ名(ホスト名)を指定してTelnetクライアントを起動するという方法である。
C:\>telnet <ホスト名>
これを実行すると、<ホスト名>で指定されたリモートマシンの「Telnetサーバ」へ接続される。<ホスト名>には、実際にはコンピュータの名前やFQDNで指定したマシンの名前、IPアドレスなどを指定する。
Telnetサーバとは、TCPの(標準では)23番ポートでリッスン(待ち受け)している、仮想的な端末との通信プロトコルを提供するサービスである。このサービスに接続すると、リモートマシン上のコンソールで直接文字を入力して、コマンドを実行しているのと同じ効果が得られる。
C:\>telnet myserver01 ……リモートのWindows Serverへtelnet接続してみる
Microsoft Telnet クライアントへようこそ ……Telnetクライアントの表示
エスケープ文字は 'CTRL+]' です ……「エスケープ文字」については後述
Welcome to Microsoft Telnet Service ……Telnetサーバからの応答
login: user01 ……ログオン名とパスワードを入力する
password:
*===================================
Microsoft Telnet Server. ……Windows Server 2012 R2のTelnetサーバサービスの応答
*===================================
C:\Users\user01.MYSERVER01>dir ……dirコマンドを実行してみる
ドライブ C のボリューム ラベルは SERVER2012 です
ボリューム シリアル番号は 6D3F-45C2 です
C:\Users\user01.MYSERVER01 のディレクトリ
2016/09/08 13:15 <DIR> .
2016/09/08 13:15 <DIR> ..
2013/08/23 00:39 <DIR> Desktop
2016/09/08 13:15 <DIR> Documents
……(中略)……
2013/08/23 00:39 <DIR> Videos
0 個のファイル 0 バイト
11 個のディレクトリ 57,389,125,632 バイトの空き領域
C:\Users\user01.MYSERVER01>exit ……リモートからログオフする
ホストとの接続が切断されました。 ……相手側が先にクローズすると、このようなメッセージが表示される
C:\> ……ローカルのコマンドプロンプト表示
Telnetは、標準ではTelnetサーバ(TCPの23番)のポートへ接続するようになっている。しかし、オプションで指定すれば、これを変更できる。例えばWebサーバなら80番、SMTPサービスなら25番、POPサービスなら110番などがよく使われるポート番号である(いずれも暗号化なしの場合)。
これらのサービスでは、主にテキストによってコマンドやその応答をやりとりしているので、Telnetコマンドで接続して、容易にそのサービスをチェックしたり、トラブルシューティングなどを行ったりすることができる(ただしSSL/TLSやSSHなどで暗号化されている通信は、Telnetでは対処できない)。
Telnetで接続するポート番号を変更するには、以下のように、ホスト名に続けてポート番号を指定する。
C:\>telnet <ホスト名> <ポート番号>
例:
telnet server1 25 ……ポート番号を数値で指定する
telnet server1 smtp ……ポート番号をサービス名で指定する
ポート番号は、数値で指定してもよいし、サービスを表す文字列で指定してもよい。実際のポート番号とサービス名の対応は「%windir%\system32\drivers\etc\services」ファイルに格納されている(UNIXやLinuxの/etc/servicesファイルに相当する)。
例えばメール送信用のSMTPサーバに接続するには、次のようにする。
C:\>telnet mailserver smtp ……SMTPサーバへ接続してみる例
エスケープ文字は 'CTRL+]' です
220 ac60a8e47b4f ESMTP Exim 4.82 Ubuntu Thu, 08 Sep 2016 03:42:23 +0000 ……SMTPサーバからの応答(グリーティングメッセージ)
HELP ……ここで「HELP」コマンドを送信してみる
214-Commands supported: ……SMTPサーバからの応答
214 AUTH HELO EHLO MAIL RCPT DATA NOOP QUIT RSET HELP ……このサーバでは、これらのコマンドがサポートされているという意味
QUIT ……「QUIT」コマンドで通信を終了させる
221 ac60a8e47b4f closing connection
ホストとの接続が切断されました。
C:\>
接続直後に一瞬だけ表示される「エスケープ文字は 'CTRL+]' です」というメッセージは、Telnetクライアント自身が出力している文字列である(詳細は後述。実際にはすぐに画面が切り替わってしまうので、これを見る機会は少ないが)。
その次の「220 〜〜」から先が実際のSTMPサーバからの応答である。この例のように、サーバ側から何らかのメッセージ(グリーティングメッセージ)が出力される場合もある一方で、出力されないようなサービスもある(テキストでメッセージが出力されないようなサービスでは、Telnetで接続してもその後の操作ができないことが多い)。
いったんサーバとの接続が確立すれば、後はキーボードからコマンドを入力すれば、それがそのままサーバへと送信される。そしてコマンドに対する応答がサーバ側から送り返されてくると、それがそのまま画面へと表示される。
上の例では、SMTPサーバのコマンド一覧を表示させるために、「HELP」というコマンドを送っている。具体的には、キーボードから[H][E][L][P]の4文字(小文字でもよい)と[Enter]キーを押せばよい。するとSMTPサーバでサポートされているコマンド一覧が表示される。ただし、場合によっては自分が入力した文字は表示されず、サーバからのメッセージしか表示されないことがある。これではユーザーは手探りでコマンドを入力せねばならず、とても使いにくい。
このようなTelnetクライアントの動きは、実は「仕様」である。Telnetクライアントを使う場合、ユーザーが文字を入力すると、その文字がすぐに画面に表示されるのが普通だ。しかし実際には、その文字はTelnetのリモートのサーバ側に送られ、サーバ側からあらためてクライアント側へと送り返されて表示されている。このような機能を「リモートエコー」という。
だが一般的なサーバアプリケーションではリモートエコーをサポートしていないので、入力した文字を表示させたければ、ローカル側で入力した文字を自分自身で表示させる「ローカルエコー」モードを有効にするとよい。このためには、次ページで述べるTelnetのオプション設定機能を利用する。
Copyright© Digital Advantage Corp. All Rights Reserved.