この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
対象OS:Windows 7/Windows 8/Windows 8.1/Windows 10/Windows Server 2008 R2/Windows Server 2012/Windows Server 2012 R2
■記事内目次
Telnetは、管理作業などを行うためにネットワーク経由でリモートのマシンへ「Telnetプロトコル」(→プロトコル規格書)でログオンする場合にしばしば用いられてきたツールである(現在では通信を暗号化できるSSHで代替されることが多いが)。
だがそれ以外にも、Webサーバや各種のネットワークサービスのデバッグなどのために、Telnetクライアントプログラムを使う機会も少なくない。
Telnetでは、基本的には単純な文字コードでしか通信ができないが、このことが逆に、ネットワークプロトコルにおける、プリミティブな(基本的な)コマンドやデータ、ステータスなどのやりとりを調べるために役に立つ。
例えばWebサーバやメールサーバとの通信がエラーになっても、クライアントプログラムによっては、そのエラーの詳細を報告してくれないことが多い。単に「通信できません」と表示されたり、「名前が見つかりません」というような、曖昧なメッセージしか表示されなかったりする。
このような場合、実際に何が起こっているのか、どうしてエラーとなるのかを調べるには、サーバへTelnetで接続して手動でコマンドを送信し、その結果のメッセージを直接見ることができれば、簡単に解決することもよくある。
Windows系のOSではTelnetを使うのはあまり一般的ではないが、UNIXやLinuxなどでは、Telnetによるリモートシステムへのログインは広く普及しているコンピュータの利用方法である。もっともセキュリティのことを考えると、TelnetではなくSSHを使うのが望ましいが、Windows OSにはSSHのサーバもクライアントも標準では用意されていない。Windows OS向けにSSHクライアントを導入する方法については、TIPS「Windowsでsshクライアント『PuTTY』を使う」を参照していただきたい。
本TIPSでは、Windows OSに標準で付属しているTelnetクライアントの基本的な使い方を紹介する。
Telnetのクライアントプログラムはデフォルトではインストールされていない。ユーザーが必要に応じて機能を追加する必要がある。
Telnetクライアントを追加するには、まずコントロールパネルの[プログラム]−[プログラムと機能]を開き、左側のメニューにある[Windowsの機能の有効化または無効化]をクリックする。Windows 8/Windows Server 2012以降なら、[スタート]ボタンを右クリックして(もしくは[Windows]+[X]キーで)表示されるクイックアクセスメニューから[プログラムと機能]を選んでもよい。
Windows 10 Creator Update以降の場合は、クイックアクセスメニューから[アプリと機能]を実行して[アプリと機能]の設定画面を表示させ、右側にある[プログラムと機能]のリンクをクリックしてから、[Windowsの機能の有効かまたは無効化]を実行する。
すると追加する機能の一覧画面が表示されるので、[Telnetクライアント]という項目を選んで追加する。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.