ssh を使おう windows

■ そういえば,もう otp 使ってないなぁ

以前 otp でパスワードを保護できますみたいなことを書いて,しばらく OTP からログインしてました.鍵計算を適度に自動化してやってくれるので 苦労があったわけではないんですが,守られるのはパスワードだけで した.通信路自体が暗号化されるに越したことはありませんが,最低限パス ワードは守ろうというスタンスでOTPを導入しましたが,やはり ssh の port forwarding は魅力なので使い始めたらやめられなくなりました.

すでに研究室のほとんどの計算機には,sshd が動いているんで,あとはクラ イアントのセットアップだけで使えるようになります.

■ ssh の仕組み

UNIXのrコマンド( rsh とか rcp とか)のポート間が暗号化されたプロト コルです.rコマンドを置き換えるだけでなく,RSAによる認証やport forwarding を行うことで....面倒なんで unix magazine とか読んでくださ い.そのうちまとめて書きます.

■ ログイン先での準備

すでに鍵を作っている場合は必要ないですが,ユーザ認証をするために ログイン先の計算機で,いくつか準備が必要です.まずログインしたい計算 機上で
  # ssh-keygen
 
と実行すると,以下のように鍵計算を行い,パスフレーズの入力を求めます. パスフレーズには,適当な文を入れておきます(8文字以上可能です).通常のパスワードのように分かりにくいものよりも,長めの文章のようなもののほうがいいかもしれま せん.
  Initializing random number generator...
  Generating p:  .....................................++ (distance 448)
  Generating q:  ...............++ (distance 160)
  Computing the keys...
  Testing the keys...
  Key generation complete.
  Enter file in which to save the key (/home/sako/.ssh/identity): 
  Enter passphrase: **********
  Enter the same passphrase again: **********
 
これで ~/.ssh というディレクトリにいくつかのファイルが作成されます.
  # ls ~/.ssh
  identity  identity.pub  random_seed
 
identity は,そのホストで自分を認証するための秘密鍵で,identiy.pub は公開鍵です.公開鍵はASCIIになっていますが,秘密鍵はさきほど入力し たパスフレーズで暗号化されています.

~/.ssh/authorized_keys とい うファイルにリストしておくことで,その鍵に対応するホストに,自分をロ グインすることを許可します.他のホストも鍵生成をして,このリストに加 えておけばいろいろなホストにリモートログインすることが出来ます(とう ぜんそれぞれに対応する秘密鍵も必要になりますが).

■ TeraTERM + ttssh の設定

windows でよく使われているターミナルソフトに TeraTERM がありますが, これに ttssh という拡張機能を用いることで ssh を利用することができます. これらのソフトウェアは以下の WWW からダウンロードすることができます. TeraTERM のインストールは簡単なので説明しません.ttssh も展開するだけ なんですが, TeraTERM から ssh を使えるようするために AUTOEXEC.BAT に
 
 set TERATERM_EXTENSIONS=1
 
を追加します.windows を再起動すると,下の図のように TeraTERM の接続 方法に SSH が加わっているはずです.

次に,接続する前に必要な設定を行います.Setupメニューから SSH と SSH Authentication をそれぞれ開きます.

SSH ではリモートホストの公開鍵を保存しておくファイルを指定します.~ /.ssh/known_hosts と同じものです.

また,SSH Authentication では,デフォルトの認証方式をRSA認証として,そ のときの秘密鍵(の書かれたファイル)の指定します.またデフォルトのログイ ンアカウントを指定しておくことも出来ます.

■ RSA認証でログインする

ホスト名を指定して,SSH によりログインを試みると,以下のようなウイン ドウが表示され,ログインする手段として,unixパスワードによる認証, RSAによる認証,rhosts による認証の3つから選択できます.

1つ目のunix パスワードによ る認証では,通信路は暗号化されているため生パスワードが流れることは有 りませんが,相手側の認証をする手だてがないので本当にログインしたいホ ストである保証はありません.ここでは,RSAによる認証でログインします. この場合は,リモートホストで作成した秘密鍵を利用するため,お互いの認証を とることができ,1つ目の手段よりも安全といえます.

ユーザ名はログ インするアカウントを入れ,パスフレーズには 鍵の生成時のパスフレーズ を入力します.秘密鍵はあらかじめ設定してあったものが使われますが,ロ グイン時に指定することも可能です.

パスフレーズが正しければ秘密鍵を復号でき,かつリモートホスト上で,ロ グインが許可されている場合にログインできます.これで通信路の暗号化 された端末を利用することができます.

■ FTP を port forwarding してみる

secure な telnet が行えるようになると,FTP とかも同じようにやり たくなりません? ssh の port forwarding あればどんなプロトコロルも secure な通信路を確保することが出来ます.当然 ttssh でも対応してます.

とりあえず FTP を ttssh で port forwarding する例を書きます. ttssh のメニューから「port forwarding」を選びます.下のようなウィンド ウが出るので,「Add」をクリックして,ローカルポートとリモートホストと リモートのポート(forwardしたいポート)をそれぞれ指定します.

これで ttssh で,設定したリモートホストにログインしているときにこの forwarding が使用できます.試しに ftp とかで

 C:\windows>ftp
 ftp> open localhost 8021                <- 設定したローカルホストのポートに接続
 Connected to orca.ics.nitech.ac.jp.     <- ローカルに接続されてるように見えるが...実は
 220 FTP server ready.
 User (orca.ics.nitech.ac.jp):(none): sako    <- 普通にログイン
 331 Response to otp-md5 255 hogehoge ext requested for sako
 Password: ********
 230 User sako logged in.
 ftp> ls 
 Connection closed by remote host.       <- なんだそりゃ
 ftp>
てな感じで port forwarding で設定したローカルホストのポートに ftp 接 続すると,(port forwarding した先の)本当の接続先であるリモートホスト に接続できています.当然この接続には ssh によって port forward されている のですべてのデータは暗号化されて流れています.つまりパスワードも守ら れます.しかしなにかコマンドを入れるとコネクションが切られます,この クライアントでは passive モードに対応してないっぽいので,これ以上のこ とは出来ません...まともなftp クライアントを使えばできるはずです.

これではイカンので,ちゃんとしたFTPクライアントで設定してみました.ちゃんとしているかどうかわかりませんが,研究室のPCに入っていたFFFTPというFTPクライアントがあったので,それを使います.なお,このソフトの具体的な使用法は説明しません.SSHのポートフォワーディングを利用する方法を紹介します.

新たに接続先を作成する
接続先のホストの設定があっても,SSHを使うときは新たに接続先をつくったほうがいいです.というか作ります.新規ホストをクリックします.

接続先の設定(基本のところ)
次のようなウィンドウが表示されます.FFFTPの通常の設定画面です.ここで,通常は ホスト名(アドレス) という項目には,接続先のアドレスを指定しますが,port forwarding を使用する場合は,まず自分のポートに接続します.具体的には localhost と書きます.その他のところは通常と同じようにします.

接続先の設定(拡張のところ)
ポート番号は通常21が使われますが,今回は先ほどTTSSHで設定したポート8021を指定します.これで設定は完了です.

これでFTPクライアントは自分のホストの8021番に接続することになります.その先については,TTSSHが目的の相手のFTPサーバのポートまでの通進路を暗号化します.これでFTPクライアントはローカルのあるポートに繋ぐだけで,見掛け上は相手のサーバにつながっているかのように見えるはずです.ためしにログインすると,ローカルポートに向いているはずが,FTPのログインのダイアログが表示され,サーバのパスワードを入力してログインすることが可能です.なお先ほども触れましたが,TTSSHが機能するためには,teraTERMでSSHを使って,そのFTPサーバにログインしている必要があります.

この ftp の port forwarding でやっていることは他の TCP/IP アプリケーション にも同様のやりかたで出来るはずです.次にやりそうなのが mail ですが, POP (とSMTP) を port forwarding してやれば,APOP を使わなくても リモー トからの secure なメールの受送信が行えます.

■ 補足

sako shinji Oct 10 1990