公開鍵認証でsshを安全に使う仕事で使える魔法のLAMP(5)

今回は公開鍵認証を利用して、VPSにログインするための準備とログインする方法を解説します。また、ログインを簡単にする「エージェント」の使い方も説明します(編集部)

» 2011年05月17日 00時00分 公開
[株式会社イメージズ・アンド・ワーズ]

鍵ペアを生成して秘密鍵を共通鍵で暗号化

 前回は公開鍵認証の基礎になっている公開鍵暗号の仕組みを解説しました。引き続き今回は、sshで公開鍵認証を利用するための具体的な設定手順を解説します。

 最初に鍵ペアを生成します。鍵ペアは生成ツールがランダムに生成してくれます。ツールが生成した秘密鍵は、前回も述べたとおり、共通鍵暗号によって暗号化します。仮に流出したり盗まれたりしても、不正に利用されることを防ぐためです。

 このときの共通鍵暗号の暗号鍵は、パスフレーズといいます。パスワードは8文字以上と、1語程度の長さですが、パスフレーズは数十文字で1文以上の長さのものを指します。長くするのはもちろん、総当たりで破られることのないようにするためです。辞書にあるような単語をパスワードに使うのは禁じ手ですが、十分に長いパスフレーズであれば問題ありません。覚えられる文章が良いでしょう。

 それでは鍵ペアを生成してみましょう。Windows版のPuTTYに付属している、PUTTYGEN.EXEを使います。標準設定では鍵の長さが1024bitになっているので、2048bitに変更して[Generate]ボタンを押します(図1)。

図1 生成する鍵の長さを2048bitに変更しておく 図1 生成する鍵の長さを2048bitに変更しておく

 [Generate]ボタンを押したら、ウィンドウ上でめちゃくちゃにマウスポインタを動かしてください(図2)。これはランダムな情報を得るための作業です。プログレスバーが完了するまで動かし続けます。

図2 ウィンドウ上部のプログレスバーが右端に達するまで、ポインタをでたらめに動かす 図2 ウィンドウ上部のプログレスバーが右端に達するまで、ポインタをでたらめに動かす

 十分なランダムデータが得られたら、鍵ペアの生成完了です(図3)。秘密鍵を暗号化する共通鍵暗号のパスフレーズを確認を含め2回入力し、秘密鍵ファイルを[Save private key]ボタンで適当な場所に保存します。

図3 鍵生成が完了したところ。公開鍵データも確認できる 図3 鍵生成が完了したところ。公開鍵データも確認できる

公開鍵をサーバに設置

 次に、公開鍵をサーバに設置します。図3のウィンドウ上部のエリアに表示されているテキストが公開鍵データになります。このテキストを、サーバのホームディレクトリにある.ssh/authorized_keysというファイルに保存します。

 なお、PUTTYGEN.EXEを閉じてしまっても、[Load]ボタンから秘密鍵ファイルをロードすれば同じ公開鍵データを再び表示できます。パスフレーズを入力しなおして再度セーブすれば、パスフレーズの変更も可能です。

 さて、これで環境の準備は完了です。先ほど保存した秘密鍵ファイルをPuTTYの設定ウィンドウで指定してから接続し、パスフレーズを入力すればログインできます(図4)。秘密鍵ファイルはPuTTYの「接続」→「ssh」→「認証」で指定できます(図5)。

図4 秘密鍵暗号でサーバにログインしたところ 図4 秘密鍵暗号でサーバにログインしたところ
図5 「認証のためのプライベートキーファイル」のテキストボックスに、先ほど生成した鍵ペアのファイルを入力する 図5 「認証のためのプライベートキーファイル」のテキストボックスに、先ほど生成した鍵ペアのファイルを入力する

 ここまでの例はPuTTYを使ったものでしたが、OpenSSHがインストールされているLinux/UNIXでも同じような手順で設定できます。鍵ペアの生成はssh-keygenコマンドを使います(図6)。生成された公開鍵は.ssh/id_rsa.pubになります。同様に接続先のサーバに設定してください。

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/atmarkit/.ssh/id_rsa): (←リターンを入力)
Enter passphrase (empty for no passphrase): (←パスフレーズを入力)
Enter same passphrase again: (←もう一度パスフレーズを入力)
Your identification has been saved in /home/atmarkit/.ssh/id_rsa.
Your public key has been saved in /home/atmarkit/.ssh/id_rsa.pub.
The key fingerprint is:
3f:ca:1e:b4:b5:73:f0:f9:29:d7:b8:58:be:26:66:ec atmarkit@www3026ub.sakura.ne.jp
図6 Linuxのssh-keygenコマンドで鍵ペアを作成したところ

sshサーバの設定を変え、パスワード認証を禁止する

 公開鍵認証でログインできることが確認できたら、パスワード認証を全体的に禁止します。/etc/ssh/sshd_configのPasswordAuthentication行を以下のように「no」にします。

PasswordAuthentication no

 変更したら次のようにして設定をリロードします。

$ sudo /etc/init.d/sshd reload

 この状態で秘密鍵ファイルを指定せずにログインを試みてください。ログインが拒否され、PuTTYのウィンドウが即座に閉じるはずです。

 これでサーバにログインできる方法は公開鍵認証のみになり、登録された公開鍵に対応する秘密鍵の所有者しかログインできないようになりました。秘密鍵をUSBメモリなどに入れて持ち歩けば、別のマシンからも同じようにログインできます。ただし、くれぐれも秘密鍵の管理には気を付けてください

安全のためにほかにも手を打とう

 まず、/etc/ssh/sshd_configで、Protocol行が次のように「2」ではなく、「2,1」などになっていたら、「2」に変更しておきましょう。

Protocol 2

 これはsshのプロトコルのバージョン番号です。バージョン1は、すでに脆弱性があることが分かっているので、現在では使われていません。

 sshのポート番号は標準で22ですが、このままにしておくと大量の不正なアクセスのログが残ると思います。特に接続元をIPアドレスで限定していない場合はひどくなるでしょう。ほとんどの場合、自動的にスキャンされているだけですので、公開鍵認証にしていたり、適切にパスワードを設定していれば放っておいてもいいのですが、気持ち悪ければポート番号を変えてしまうという手もあります。

 sshのポート番号を変えるには、/etc/ssh/sshd_configのPort行を、「10022」などにします。

Port 10022

 サーバ側のポート番号を変更したら、もちろんクライアント側のポート番号も変更しましょう。

パスフレーズ入力の手間を省くエージェント

 ログインするたびに長いパスフレーズを入力しなくてはならないのは、結構面倒なものです。そのため、エージェントというパスフレーズの入力を省略するための仕組みが付属しています。

 まずは使ってみましょう。PuTTYに付属しているPAGEANT.EXEを起動します。ウィンドウは開かずに通知領域(タスクトレイ)にアイコンが表示されますので、これをダブルクリックします。ここで開いたウィンドウは秘密鍵の管理画面になります(図7)。

図7 秘密鍵の管理画面。初期状態では空 図7 秘密鍵の管理画面。初期状態では空

 Add Keyボタンを押して、作成した秘密鍵ファイルを選択します。パスフレーズを入力すると、秘密鍵が登録されます(図8)。

図8 秘密鍵が登録された状態 図8 秘密鍵が登録された状態

 同じようにして複数の秘密鍵を登録できます。Remove Keyで登録を解除することもできます。なお、秘密鍵の登録はWindowsを起動するたびに必要です。

 このように秘密鍵を登録した状態でPuTTYでログインしてみましょう。ユーザー名の入力だけで、いきなりログインできるはずです。ユーザー名もPuTTYに設定できますから、そうすると接続先を選ぶだけでログインできるようになります。

 これはこれで、ちょっと危ないのでは? と思った方もいると思います。それはまったくその通りです。多少のセキュリティ上のリスクはありますので、それを踏まえた上で利用しなければなりません。

 まず単純な例では、スクリーンロックせずに席を離れたときに勝手に使われる恐れがあります。

 エージェントは暗号化されていない秘密鍵データをメモリ上に保持しています。もし悪意のあるソフトウェアが同じコンピュータ内で実行される可能性があるとすると、メモリの内容を読み取られる恐れもあります。エージェントとPuTTYの間は、秘密鍵そのものはやりとりせず署名をやりとりするだけですが、偽のPuTTYとして署名を引き出すこともできます。

 秘密鍵を「使うときだけパスフレーズで復号」という手順を省略する以上、「使ってないときでも復号されている」ということを念頭に置き、盗まれることのないよう、安全な利用を心がけてください。

 次回からはビルドやコンパイルについて基本から解説していきます。

著者紹介

株式会社イメージズ・アンド・ワーズ
代表取締役
山口晴広(やまぐち はるひろ)



「仕事で使える魔法のLAMP」バックナンバー

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。