UNIX/Linuxの部屋 telnetコマンドの使い方

TOP UNIX/Linuxの部屋 UNIX/Linuxコマンド一覧 用語集 新版 由来/読み方辞書 環境変数マニュアル Cシェル変数 システム設定ファイル システムコール・ライブラリ ネットワークプログラミングの基礎知識 クラウドサービス徹底比較・徹底解説




コマンド telnet リモートホストにログインする このエントリーをはてなブックマークに追加

最終更新


UNIX/Linux の telnet コマンドは、リモートホストにログインしたり、外部の Web サーバ等に接続して接続性を確認したりするためのコマンドである。


はじめに
telnet コマンドは、外部サーバにログインするために 1990年代に広く使用されていたコマンドである (rlogin や rsh も使用されていた)。多くのサーバには telnetd というデーモンが起動しており、telnet コマンドで telnetd に接続し、ログインする、ということを行っていた。

しかし telnet コマンドはデータを暗号化せずに平文で送受信するため、ネットワークを盗聴されていると ID・パスワードや、実行したコマンドやその結果がすぐに漏れてしまう欠点があった。暗号化機能を持つ ssh が 1995年に公開され、2019年現在では telnet コマンドを「リモートログイン」の用途として使ってはいけない状況である。

ただし、接続性の確認やプロトコル確認のためのシンプルなクライアントとして使用することは全く問題ないため、telnet コマンドは「ログイン」以外の用途で使用してほしい。

telnet コマンドのインストール方法
FreeBSD では telnet コマンドは標準でインストールされている。
Linux では外部パッケージであるため、yum や apt-get にてインストールする。
% sudo yum install telnet
または
% sudo apt-get install telnet

telnet コマンドでリモートホストにログインするには
telnet コマンドでリモートホスト foo.bar.com にログインするときは下記のようにする。
% telnet foo.bar.com (foo.bar.com にログインする)
Trying 100.111.112.113...(100.111.112.113に接続)
Connected to foo.com (接続成功)
Escape character is '^]'. (Ctrl-] を押すと telnet のプロンプトに移行する)
FreeBSD (foo.com) (ttyp3)
login: ログイン名を入力
Password: パスワードを入力
(ログイン成功)
...(リモートホスト上で作業)

接続中に Ctrl-] を押すと、
telnet>
という telnet のプロンプトに移行する。間違って Ctrl-] を押したのなら、リターンキーを押すことで、再び元の状態 (リモートホストに接続した状態) に戻ることができる。

もし、相手ホストが無反応になったりして、接続を切りたい場合は、Ctrl-] を押して telnet のプロンプトに移行したあと、
telnet> quit (あるいは q だけでもよい)
とすればよい。なお、普通にログアウトしたいなら、Ctrl-]・quit を使わず、素直にシェル上から exit や logout コマンドを実行すること。

リモートホストに telnet でログインするには、相手側に telnetd (telnet サーバ) が起動しており、ファイアウォールや tcpwrapper などで接続拒否されず、なおかつリモートホストのアカウントのログインシェルが適切に設定されている必要がある (ログインシェルが /nonexistent とか、/bin/date などになっていては、ログインするとそのプログラムが実行されて、実行が終わるとすぐにログアウトしてしまうということ)。

もちろん大前提として、リモートホストにアカウントがあり、ユーザ名とパスワードを知っている必要がある。

接続性の確認・プロトコルの確認 - HTTP 編
telnet コマンドは、サーバソフトウェアの動作確認やプロトコル確認にも使用することができる。下記例では hostname のポート80 に接続し、HTTP プロトコルで http://hostname:80/index.html の内容を取得している。
% telnet hostname 80
GET /index.html HTTP/1.0(リターン)
Host: hostname:80(リターン)
(リターン)

SSL/TLS で接続したい場合は、openssl コマンドの s_client を使うのがよい。
% openssl s_client -connect www.verisign.co.jp:443

接続性の確認・プロトコルの確認 - POP3 編
下記は POP3 でメール確認を行う例である。
% telnet mypop3.example.com 110
Trying 11.22.33.44 ...
Connected to mypop3.example.com
Escape character is '^]'.
+OK
USER myuser
+OK Password required for myuser.
PASS xxxxxxxx
+OK myuser has 2 message(s) (1222 octets).
STAT
+OK 2 1222
LIST
+OK 2 messages (1222 octets)
1 800
2 422
RETR 1
+OK 800octets
(メールの内容)
QUIT
+OK

上記で使用した POP3 プロトコルの説明は下記のとおり。
  • USER・PASS で認証
  • STAT でメール数とサイズの確認
  • LIST でメールごとのサイズの確認
  • RETR でメール内容に受信
  • QUIT で終了

自動ログイン
自動的にログインし、自動的にコマンドを実行するには sleep の項のサンプルを参照。

関連コマンド
外部サーバにログインしたり、外部サーバでコマンドを実行することが目的であれば telnet コマンドではなく通信が暗号化された ssh コマンドを使うべきである。

接続性の確認・プロトコルの確認には、socat コマンドを使うと便利である。特に readline と連携して入力文字列の履歴が残せたりする。
% socat readline,history=$HOME/.http_history TCP4:www.jp.freebsd.org:80,crlf

telnet コマンドと同種のプログラムとして rlogin や rsh がある。telnet コマンドで外部サーバにログインする際、telnet が行うのはログインプロンプトを表示したり、キーボードから入力されたパスワード文字列を送信したりすることだけで、認証そのものには立ち入らない。一方、rlogin コマンドは rlogin プロトコルにおいて認証部分まで立ち入った設計となっている。
>> FreeBSDオンラインマニュアル(man) FreeBSD telnet(1)
>> Linuxオンラインマニュアル(man) Linux telnet(1)