2006年8月17日木曜日

UTF-8 TeraTerm Pro with TTSSH2でFreeBSDにログイン

ずいぶん長いこと、TeraTermという端末エミュレータにはお世話になっています。TELNETでリモートログインするのはもちろんのこと、シリアル端末エミュレータとしても使えるので、RS232Cで接続して、キーボードもビデオボードも載っていないSunのワークステーションのコンソールとして使ったり、スイッチングハブの設定を行ったり、RAID装置の設定を行ったり・・・いろいろ重宝しています。

さらに、TTSSHという追加のソフトを使うと、sshプロトコルでログインできるようになって、セキュリティ面でも万全

・・・だったんですが、SSHプロトコルのバージョン1は、もはや、セキュリティ面では安全ではないということになり、今では、デフォルトでは、SSHバージョン2プロトコルのみ有効になっていることが多いです(FreeBSDも)。SSHバージョン1も許可するように設定を変更すれば、一応、TTSSHでもログインできるんですけど・・・なんとなくね。



ちなみに、TTSSHについては、以前、ここで軽く触れていました。







さてさて、TeraTermで残念だったのが、TTSSHが、SSHバージョン1プロトコルにしか対応していなかったこと



・・・だったんですが(またか)、しばらく前に、

UTF-8 TeraTerm Pro with TTSSH2

というのを教えてもらいました。要するに、SSH2プロトコルに最初から対応した、改良版のTeraTermということだようです。文字コードのUTF-8にも対応しているということで、個人的にはまだあまりUTF-8の必要性を強く感じてはいないのですが、何かのときに重宝することがあるかもしれません。







今回は、とりあえず、この「UTF-8 TeraTerm Pro with TTSSH2」(長いなぁ・・・省略形はないのでしょうか?)を使って、FreeBSDにログインするまでのお話です。



● SSHの鍵を作成する



UTF-8 TeraTerm Pro with TTSSH2でも、メニューの[設定]-[SSH Keyの作成]にて、SSHの鍵を作成できるようですが、ここでは、ssh-keygenコマンドを使った、どこでもつかえる(と思う)、ごく一般的な方法を紹介します。



ssh-keygenは、ssh(openssh)に含まれているコマンドです。まずは、FreeBSDにログインします。



おもむろに、「ssh-keygen -t rsa」というコマンドを実行します。
途中で、2回、パスフレーズ(パスワードみたいなものだけど、8文字までとかけち臭い制限がないので、覚えやすい文章にするとよい)を入力するようにいわれます。



% ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/nhh/.ssh/id_rsa):
Created directory '/home/nhh/.ssh'.
Enter passphrase (empty for no passphrase): パスフレーズを入力
Enter same passphrase again: もう1度入力
Your identification has been saved in /home/nhh/.ssh/id_rsa.
Your public key has been saved in /home/nhh/.ssh/id_rsa.pub.
The key fingerprint is:
0a:c7:f1:14:98:fa:39:85:1b:2a:64:92:c6:c5:db:1f nhh@freebsd5-vm.local



とくに鍵ファイルの名前を指定しなかったので、ホームディレクトリの、「.ssh」というサブディレクトリの中に、「id_rsa」と「id_rsa.pub」という2つのファイルが作られます。



ちなみに「ssh-keygen -t dsa」というコマンドで、DSA方式の鍵を作ることができます。この鍵も、SSHバージョン2プロトコルで使用できます。OpenSSHのデフォルトでは、DSA鍵のほうが優先して使用されるようです。





公開鍵ファイルの内容



Utf8teraterm4



秘密鍵ファイルの内容



Utf8teraterm5







SSHは、公開鍵暗号という仕組みを使っていて、公開鍵暗号では、「秘密鍵」と「公開鍵」という2つの鍵があります。



  • id_rsaが秘密鍵です


  • id_rsa.pubが公開鍵です


  • 秘密鍵は、さらにパスフレーズ(鍵作成時に指定したもの)によって暗号化されています


  • 秘密鍵は、自分だけの「秘密」としておき、他人に渡してはいけません。今回、この秘密鍵は、Windows側のTeraTermが使用します。


  • 公開鍵は、事前に、認証してほしい相手に渡しておきます。今回、この公開鍵は、FreeBSD側においておきます。




ちょっとややこしい話ですが、Windows上でUTF-8 TeraTerm Pro with TTSSH2を使って、FreeBSD(リモートホスト)へログインする場合



  • FreeBSD側(sshで認証する側)にて、あらかじめ公開鍵を登録しておく。


  • Windows上で、UTF-8 TeraTerm Pro with TTSSH2を実行するユーザーが秘密鍵を持っていて、


  • sshでのログイン認証のときに、公開鍵暗号により、正しい秘密鍵を持ってユーザーであると証明できたときに、ログインが許可される。


てなかんじになります。





■ sshでFreeBSDにログインできるようにする準備



● $HOME/.ssh/authorized_keysというファイル



$HOME/.ssh/authorized_keys というファイルに、ログインを許可したい人(=Windows上にいる自分)の公開鍵を追加します。



authorized_keysというファイルがなければ、先ほど作成した公開鍵ファイルid_rsa.pubをコピーします。

% cd ~/.ssh/
% cp id_rsa.pub authorized_keys

すでにauthorized_keysというファイルがある場合は、catでアペンドします。

% cat id_rsa.pub >> authorized_keys

$HOME/.sshディレクトリは、こんな感じです。秘密鍵は重要なファイルなので、ファイルのパーミッションには気をつけてください。



% ls -la $HOME/.ssh/
total 12
drwx------  2 nhh  nhh  512 Aug 15 14:52 .
drwxr-xr-x  3 nhh  nhh  512 Aug 15 14:48 ..
-rw-r--r--  1 nhh  nhh  231 Aug 15 14:37 authorized_keys
-rw-------  1 nhh  nhh  951 Aug 15 14:34 id_rsa
-rw-r--r--  1 nhh  nhh  231 Aug 15 14:34 id_rsa.pub
-rw-r--r--  1 nhh  nhh  599 Aug 15 14:52 known_hosts



known_hostsというファイルは、リモートホストのホスト鍵が保存されているファイルで、最初はありません。FreeBSD上でsshを実行すると、自動的に作成されます。





● 秘密鍵をWindowsにもっていく



なんとなく、いや~んですが、FTPで持っていくとか・・・



● FreeBSDでFTPを使えるようにする方法



/etc/inetd.confを編集して、以下のftpの行の先頭の「#」を削除して、有効にする。



ftp     stream  tcp     nowait  root    /usr/libexec/ftpd       ftpd -l



inetdを有効にする。/etc/rc.confに、もし入っていなければ、以下の1行を追加する。

inetd_enable="YES"

もともとinetdを実行していなかった場合は、以下のコマンドでinetdを実行する。

# /etc/rc.d/inetd start
Starting inetd.
# ps axww|grep inetd
  517  ??  Ss     0:00.05 /usr/sbin/inetd -wW -C 60
  519  p0  S+     0:00.03 grep inetd

もともとinetdを実行していた場合は、HUPシグナルを送って、inetd.confを再読み込みさせる。

# kill -HUP `cat /var/run/inetd.pid `

● WindowsからFTPで秘密鍵を取りに行く



Windowsのftpコマンドでは、こんなかんじ。



C:\>ftp 192.168.1.3
Connected to 192.168.1.3.
220 freebsd5-vm.local FTP server (Version 6.00LS) ready.
User (192.168.1.3:(none)): nhh
331 Password required for nhh.
Password: FreeBSDへログイン時のパスワード
230 User nhh logged in.
ftp> cd .ssh
250 CWD command successful.
ftp> get id_rsa
200 PORT command successful.
150 Opening ASCII mode data connection for 'id_rsa' (951 bytes).
226 Transfer complete.
ftp: 969 bytes received in 0.00Seconds 969000.00Kbytes/sec.
ftp>



Windows上でのカレントディレクトリにid_rsaファイルができます。



id_rsaというファイルは、一応、パスフレーズで暗号化はされていますが、誰にもアクセスできない場所に置いといてください(とはいっても、Windows XP Home Editionとかだとねぇ・・・)。





■ UTF-8 TeraTerm Pro with TTSSH2でFreeBSDにログイン



[ファイル]-[新しい接続]にて、



  • 「TCP/IP」を選び、


  • 「ホスト」にはリモートホストのホスト名やIPアドレスを指定


  • 「サービス」に、「SSH」を選択


  • そのほかは、デフォルトのままで大丈夫だと思うけど、適当に指定


  • [OK]ボタンを押す


Utf8teraterm1



はじめて接続するホストの場合、known hostsに登録するか?というメッセージが表示されます。接続先が、偽のホストかもしれないので、ホスト鍵のフィンガープリント(指紋)が正しいかどうか、確認してくれ、ってことです。



Utf8teraterm2



よければ、[続ける]をクリックします。



ちなみに、このホスト鍵のフィンガープリントってのは、どうやってわかるかというと・・・今さっき調べました・・・
「ssh-keygen -l -f ホストの公開鍵ファイル」で表示されます。ホスト(この場合これからログインしようとしているFreeBSDマシン)上にて、以下のようなコマンドを実行することでわかります。



% ssh-keygen -l -f /etc/ssh/ssh_host_dsa_key.pub
1024 77:4e:d4:97:67:d5:db:2e:d4:c6:20:18:4c:b0:39:e8 /etc/ssh/ssh_host_dsa_key.pub



% ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub
1024 86:e4:d2:ee:88:db:40:bb:76:de:cf:82:50:12:bc:b1 /etc/ssh/ssh_host_rsa_key.pub



% ssh-keygen -l -f /etc/ssh/ssh_host_key.pub
1024 1e:ff:40:0a:5e:18:d7:54:f2:22:c8:4e:03:24:4d:f9 /etc/ssh/ssh_host_key.pub



FreeBSDに標準で入っているsshdは、/etc/sshディレクトリにあるホスト鍵を使用します。鍵が3個もあるので、いったいどれが使われているんだ?!って気がしますが、/etc/ssh/sshd_configという設定ファイルを眺めていると、どうやらsshバージョン2プロトコルの場合は、ssh_host_dsa_keyが使われているようです。
たしかに、TeraTermで表示されたフィンガープリントと一致しています。







さてさて、次にSSH認証の画面になるので、ユーザー名と、パスフレーズを入力し、Private key fileボタンをクリックして、先ほどの秘密鍵ファイルを指定します。



Utf8teraterm3



これでログインできるはずです。







■ UTF-8 TeraTerm Pro with TTSSH2でFreeBSDに、パスワード認証でログイン



えぇと・・・通信プロトコルと認証手段というのは、別々なものでして、こんがらがる話かもしれませんが・・・



上記の公開鍵暗号を用いるssh認証ではなく、普通のloginのときのパスワード認証でも、ログインできます。それでも、通信内容は、SSHプロトコルによって暗号化されているので、ネットワーク上の盗聴には、一応安全です。



SSHの鍵を作らなくていい分だけ、楽なんですが、最近のFreeBSDのsshdでは、パスワード認証が無効化されているので、有効にしてやる必要があります。



/etc/ssh/sshd_configの、PasswordAuthenticationというところを、以下のように書き換えてやる。

#PasswordAuthentication no
PasswordAuthentication yes

sshdを再起動します。



# /etc/rc.d/sshd restart
Stopping sshd.
Starting sshd.



TeraTermでは、ログインするときに、「プレーンテキストを使用」を選んで、パスフレーズに、login時のパスワードを入力します。



Utf8teraterm6





■ UTF-8 TeraTerm Pro with TTSSH2でおかしいなと思ったところ



すでに再現できなくなってしまったのですが、当初、0のキーを押すと4~とでてくる、tのキーを押すと6~とでてくる、とおかしな挙動・・・なんだと思えば、

^[[24~ とか ^[[26~

というキーコードが発生していました。



メニューの[設定]-[キーマップの読み込み]でIBMKEYB.CNFを指定したら、直りました。



あとは、これとか・・・



Utf8teraterm7





ポートフォファーディングってねぇ。



とはいえ、今のところ、Puttyよりはお気に入りになっています。





■ 補足



注意深い人は気が付いていると思いますが、上記の手順にしたがってsshを使えるように設定すると、

WindowsとFreeBSDとで、同じ秘密鍵を使う

ようになります。



つまり、このFreeBSD上でsshを実行したとき(たとえばこのFreeBSDマシンから、別のFreeBSDマシンとかLinuxとかSolarisとかへsshでログインするとき)にも、秘密鍵として$HOME/.ssh/id_rsaが、つまりWindows上のTeraTerm ssh2と同じ秘密鍵が、使われるようになります。なんとなくそれイヤ~ン、というときは、FreeBSD上でid_rsa、id_rsa.pubを削除して、ssh-keygenで別の鍵を作ってください。



それでも、authorized_keysに公開鍵がすでに登録されているので、WindowsからはTeraTerm ssh2でログインできます。





0 件のコメント:

コメントを投稿