Telnet、SSL

telnetサーバーとtelnetクライアント用コマンド

単にtelnetと言うと、一般にtelnetコマンドを指すのが普通です。
telnetコマンドは、ネットワークにつながれたコンピュータを 遠隔操作(Remote Control)するためのコマンドです。
Windows2000、WindowsXPなどではコマンドプロンプトで、 例えば次のように入力して、起動します。

C:\>telnet 192.168.0.33

このソフトはtelnetサーバーに対するクライアントソフトで、 すでにtelnetサーバーが動いているマシンが、遠隔操作の対象です。
そしてこの例で示している"192.168.0.33" が telnetサーバーの動いているホストのIPアドレスと言うわけです。

一般には、このコマンドの後で、次のようにログイン操作をして、 後は、サーバー側で使えるコマンドを入力して 操作する形態です。

login:guest
Password:このパスワードの入力は見えません
Welcome !!
[guest]$

この中で使えるコマンドは、 サーバー側のOSによりますが、 一般にサーバー側のコマンドが使えます。 例えば、接続先がLinuxならLinuxコマンド、WindowsならWindows用のコマンドが使えます。
最後は、logoutコマンドを入力して、終了します。
簡単な実験ができるようにWindowsの実験用 telnetサーバーソフトをここに用意しました。
ここ ←この右クリックで、ファイル名を『JTelnetServer.jar』で保存して実験できます。
Zドライブのnetworkディレクトリの中にworkディレクトリを作り、そこにコピーして実験している例を示します。
以下がサーバー(JTelnetServer.jar)の起動画面例です。(このサーバーを起動したマシンが、telnetコマンドの遠隔操作対象となります。)

次に、telnetコマンド(クライアント)で、ログインし、操作するわけです。
以下では、new の名前のディレクトリを作り、その中にt.txtのファイルを作り、それに文字列を書き込んでいる操作例です。

このようにtelnetコマンドは、サーバーマシンを遠隔操作(Remote Control)するコマンドですが、 実質的には、キー入力した文字列をサーバーへ送信し、受信した文字列を表示しているだけです。
サーバー側で受信した文字列のコマンドを実行し、その実行結果の文字列をクライアントへ送り返しているのです。
telnetコマンド自体はtelnetサーバー以外のサーバーでも接続できるので、 このtelnetコマンドの送受信の機能を利用して、他のサーバーに対してキー入力した文字列を 送信し、その応答の受信文字列を確認できます。以降でその確認実験用にtelnetを使います。
以下にWindowsXPの実行例を示します。

なお、文字化けする場合は、telnetだけ入力して、後からキャラクタセットを変更できます。
C:\>telnet
上記の実行で、telenetのコマンド実行状態の画面がに切り替わります。 以下で、『set codeset Shift JIS 』の入力で漢字コードセットをShift JISに変更し、 それから『open 192.168.0.33 23』で接続することが可能です。 (接続前に、『?』の入力で、各種コマンドが確認できます、それを試してから行っています。)
Microsoft Telnet クライアントへようこそ

エスケープ文字は 'CTRL+]' です

Microsoft Telnet> ?

コマンドは省略することができます。サポートされているコマンド:

c    - close                      現在の接続を終了します
d    - display                    パラメータを表示します
o    - open ホスト名 [ポート番号] ホスト名に接続します (既定のポート番号は 23)
q    - quit                       telnet を終了します
set  - set                        オプションを設定します ('set ?' で一覧表示)
sen  - send                       サーバーに文字を送信します
st   - status                     状態を表示します
u    - unset                      オプションを解除します ('unset ?' で一覧表示)
?/h  - help                       ヘルプを表示します
Microsoft Telnet> set ?
bsasdel         BackSpace を Del として送信します
crlf            ニューライン モード - リターン キーで CR および LF を送信します
delasbs         Del を BackSpace として送信します
escape x        telnet クライアント プロンプトで x をエスケープ文字として
                入力します
localecho       ローカル エコーを使用します
logfile x       x は現在のクライアント ログ ファイルです
logging         ログを有効にします
mode x          x には console または stream が入ります
ntlm            NTLM 認証を使用します
term x          (x には ansi, vt100, vt52, または vtnt が入ります)
codeset x       (x には Shift JIS,
                        Japanese EUC,
                        JIS Kanji,
                        JIS Kanji(78),
                        DEC Kanji または
                        NEC Kanji が入ります)
Microsoft Telnet> set localecho
ローカル エコー: オン
Microsoft Telnet> set codeset Shift JIS
エミュレーションの種類: VT100/漢字コードセット: Shift JIS
Microsoft Telnet> open 192.168.0.33 23

上記操作以降で、遠隔操作対象(192.168.0.33 のマシン)の操作画面になります。
なおここで入力した23はwell-knownのート番号で、省略できますが、 このようにtelnetサーバーのポート番号を指定して接続することも可能です。

 SSH (Secure Shell: セキュアシェル) 

上記 Telnetのようにリモートホストのコマンドシェルを利用する。( well-knownのート番号は 22 です。)
Telnetは、サーバーとクライアント間のパスワードも含め、平文(暗号化しない)で送受信します。
そのため、パスワードなどがネットワーク経路上で盗聴されるリスクが高いと言えます。
そこで安全に、既存のプロトコルを代用する手段として作られたのが SSH です。(rfc4252.txt)
SSHの暗号通信は、ハイブリッド暗号が可能です。(公開鍵暗号方式で共通鍵の鍵交換を行い、通信自体は高速な共通鍵暗号を用いる)
SSHを利用することで、入力コマンド、処理結果の出力などを、すべて暗号化して送受信できます。

なおSSHプロトコルを使って、SCP(Secure Copy)や、SFTP(SSH File Transfer Protocol)のように、安全なファイル転送の技術が開発されています。

SSHのバージョン1には脆弱性が見つかっており、バージョン2のプロトコルを使う方が望ましいとされています。
また 一般には、オープンソースのOpenSSHが普及しているようです。(2012年)

(個人的にWindowsで使っているのは、日本語が使えるこれを利用しています。)