TeraTermProで公開鍵認証を使う
2006年1月16日 掲載
SSHによる接続の安全性を高めるには「公開鍵」による認証を使います。特に外部から自宅サーバーに接続するときは、安全性の高い公開鍵認証を利用するようにサーバーの設定を変更しておくべきです。
公開鍵暗号とは
公開鍵暗号というのは1970年代後半に考案されたもので、暗号化と解読に別のカギを使おうというものです。「公開鍵」「秘密鍵」という一対のカギを用意しておきます。「公開鍵で暗号化したものは秘密鍵でしか解読できず、反対に秘密鍵で暗号化すると公開鍵でしか解読できない」という特徴があります。つまり、暗号化と解読に別々の鍵を使うわけです。
これを利用するとパスワードを相手に知らせることなく、暗号化されたデータをやりとりできます。あらかじめ公開鍵を相手にしらせておき、データを受け取るときは公開鍵で暗号化してもらいます。そのデータを解読できるのは秘密鍵を持っている自分だけです。
公開鍵暗号でログインする仕組み
SSHでのユーザー認証にもこの公開鍵暗号を使います。ちょっと複雑ですが、こんな手順で安全性を高めています。
- 接続する側のパソコン(クライアント)に秘密鍵を保存しておき、サーバーの側に公開鍵を入れておく。
- ログインするとき、サーバーはクライアントに向けて、ユーザーの公開鍵で暗号化したメッセージを送信する。
- メッセージを受け取ったクライアントではユーザーの秘密鍵でメッセージを解読する。
- クライアントは解読したメッセージをサーバーに送り返す。
- 暗号化する前のメッセージと送られてきたメッセージが一致すれば、サーバーはログインを許可する。
サーバーが公開鍵で暗号化したものを解読できるのは、秘密鍵を持つユーザーだけ。この方式ならパスワードをネットワーク上で送ることなく確実にユーザーの認証ができるわけです。

作業の手順
安全性を高められる公開鍵暗号だが、実際の設定はけっこう面倒。次のような流れで設定を進めていきます。
- ユーザーの秘密鍵と公開鍵のペアを作成する。TeraTermProの機能を使うとWindows上でカギを作れる。
- 作成した公開鍵をサーバーに登録する。ユーザーディレクトリにある「authorized_keys」にカギを追加する。
- サーバー側でSSHサーバーの設定を変更し、公開鍵暗号でのログインを指定する。
- パソコンのSSHクライアントで公開鍵による認証を行うように設定する
1:秘密鍵と公開鍵を作成する
以前に作成したこちらのページ(公開鍵暗号でSSHのセキュリティを高める)では、サーバー側で秘密鍵と公開鍵のペアを作成する手順を紹介しました。しかし、この手順ではちょっと面倒なので、このページではWindows側でカギを作成してみます。「UTF-8 TeraTermPro」(入手方法はこちらのページを参照)を利用します。
- TeraTermProを起動して、接続画面が現れたら「Cancel」をクリックして画面を閉じる。
- メニューから「設定」→「SSH Key Generator」の順にクリック。
- カギの作成画面が開いた。「Key type」では「RSA」を選択し、「Generate」ボタンをクリックしよう。
- 「Key passphrase」と「Confirm Passphrase」にそれぞれ同じパスワードを入力する。ここで入力するパスワードとはサーバーにログインするときに使うものではなく、秘密鍵を利用するときに入力するものだ。万が一、秘密鍵が流出したとしても、ここでパスワードを指定すると第三者は秘密鍵を使えない。
- 上の画面で「Save public key」をクリック。保存画面が開いたら、「id_rsa.pub」という名前で公開鍵を保存。また、上の画面で「Save
private key」をクリックし、「id_rsa」という名前で秘密鍵を保存する。この秘密鍵は盗まれないようにしっかりと管理しよう。これでカギの作成は完了。「Cancel」ボタンでカギ作成画面を閉じる。
- TeraTermProをインストールしたフォルダ(デフォルトではC:\Program File\teraterm)を開き、「id_rsa」「id_rsa.pub」の2つのファイルが作成されているか確認する。
2:公開鍵をサーバーに登録する
Windowsパソコンで作成した公開鍵をサーバーに登録します。ユーザーディレクトリの「.ssh」ディレクトリの中にある「authorized_keys」に公開鍵を追加します。いろんな登録方法がありますが、もっとも簡単なのはTeraTermProでサーバーに接続して、viでauthorized_keysを開き、公開鍵を貼り付けるというもの。ほかにもftpで公開鍵(id_rsa.pub)をサーバーにアップロードし、authorized_keysにリネームするという手もあります。
- 先ほど作成した公開鍵(id_rsa.pub)をメモ帳などで開く。公開鍵は単なるテキストファイルだ。この内容をすべて選択して、クリップボードにコピーする(メニューから「編集」→「コピー」と選択する)。
- TeraTermProでサーバーにログインする。このページの手順でユーザー名とパスワードを入力するとログインできる。ログインしたら、次のようにコマンドを入力して、「.ssh」ディレクトリを作成し、viを起動する。
$ mkdir .ssh ←.sshディレクトリを作成する $ cd .ssh ←.sshディレクトリに移動する $ vi authorized_keys ←viでauthorized_keysを新規作成する $
- 「i」キーを押して挿入モードに切り替え、「Alt」+「v」キーを押してクリップボードの内容を貼り付ける。「Esc」キーでコマンドモードに戻り、「:w」「Enter」キーでファイルを保存。「:q」「Enter」でviを終了する。
3:SSHサーバーの設定を変更する
サーバー側でSSHサーバーの設定を変更し、パスワードでの認証を禁止するとともに、公開鍵での認証を行うように指定します。SSHサーバーの設定を行うには「/etc/ssh/sshd_config」をviで開いて編集します。コマンドプロンプトから「vi /etc/ssh/sshd_config」と入力してください。長いファイルですが設定変更は一カ所だけです。「PasswordAuthentication」を「yes」から「no」に変更します。元のファイルで行頭に「#」が付いているのは、コメントとして無効にされているので、「#」を削除することを忘れないようにしましょう。
同じディレクトリに「/etc/ssh/ssh_config」というファイルもあるが、こちらはSSHクライアントの設定ファイルなので間違えてはいけません。
- TeraTermProでサーバーに接続。suコマンドでスーパーユーザーになって、viコマンドで/etc/ssh/sshd_configを開く。
$ su- ←スーパーユーザーになる # vi /etc/ssh/sshd_config ←viコマンドでsshサーバーの設定ファイルを開く
- sshd_configの次の箇所を修正する。行頭の「#」を削除することも忘れないように。
PasswordAuthentication no ←パスワードではなくカギでログインするついでに以下のような項目もいっしょに設定しておこう。さらに安全性を高められる。
PermitRootLogin no ←rootでのログインを禁止する PermitEmptyPassword no ←パスワードなしのログインは許可しない AllowUsers ×× ←指定したユーザーのみログインを許可
- ファイルを保存したら、SSHサーバーを再起動する。スーパーユーザーのままコマンドラインから次のように入力する。これでパスワードでのログインはできなくなり、公開鍵での認証だけが有効になる。設定が終わったらサーバーからログアウトしよう。
# /etc/rc.d/init.d/sshd restart ←SSHサーバーを再起動 # exit ←一般ユーザーに戻る $ exit ←サーバーをログアウトする
4:Windowsマシンから公開鍵認証でログインする
TeraTermProを使って、Windowsマシンから公開鍵認証でログインします。もうパスワードでのログインはできなくなっているので注意してください。
- TeraTermProを起動し、サーバーのIPアドレスかホスト名を指定。「Service」は「SSH」、「SSH version」は「SSH2」を選択して、「OK」ボタンをクリックする。
- 「User name」にログインするユーザー名を入力。「Passphrase」には秘密鍵を作成するときに指定したパスワードを入力(Linuxへのログインパスワードではないところに注意)。ログイン方式としては「Use
RSA/DSA key to log in」をチェックし、「Private key file」ボタンをクリックして、TeraTermProのディレクトリに保存されている秘密鍵(id_rsa)を選択する。これで「OK」ボタンをクリックすれば、サーバーにログインできる。
無事にログインできたでしょうか。しかし、ログインするたびに秘密鍵を指定するのは面倒なもの。TeraTermProではログインに利用する秘密鍵を記憶することができます。メニューから「設定」→「SSH Authentication」とクリックしてください。「User name」にユーザー名を入力し、「Use RSA/DSA key to log in」をチェックして、秘密鍵のファイルを指定します。「OK」ボタンで画面を閉じたら、「設定」→「設定の保存」で加えた変更を保存します。これで次回からサーバーにログインするときは、秘密鍵にアクセスするためのパスフレーズを入力するだけでログインできるようになります。
