sshで公開鍵認証のみを利用する方法

*****このページの内容は、sshで公開鍵認証のみを利用する方法で公開されていたものです*****

自宅にサーバを立てている方であれば、インターネット経由で自宅サーバのターミナルにアクセスしたい、と一度は思われたことがあるのではないでしょうか。言い方を変えれば、sshのポートを開放して、自宅の外から自由にアクセスしたい、ということです。

しかし、単純にsshのポートを外部から許可するだけでは、セキュリティ的に超危険です。実際にやってみればわかりますが、しばらくすると海外から猛烈な勢いでブルートフォース攻撃を受けることになります。もっとも、管理人の経験では組み込みのアカウント(bindとか)を有効にしたり、ありがちなアカウント(testとかアプリ名)を作成しない限りにおいては、そう簡単にやられてしまうことはありません。とはいっても、怖いのも事実です。

しかし、sshの認証方式として、公開鍵認証のみを有効にすれば、認証の仕組み自体に致命的なセキュリティホールが発見されでもしない限りは、不正侵入を受けることはまずあり得ません。今回、管理人がその設定を行いましたので、その手順を参考までにご紹介します。

sshのクライアントはいろいろありますが、管理人はPuttyを愛用しているので、こちらで話を進めます。
Puttyには、専用の公開鍵生成ツールであるPuttyGenというツールがあるので、こちらを利用します。公式サイトなどからputtygen.exeを入手して起動すると、以下のような画面が現れます。

PuttyGen1

公開鍵ペアを生成するには、”Generate”をクリックします。マウスを適当に動かすように促すメッセージが表示されるので、右端にたどり着くまで動かしまくります(マウスの座標が、公開鍵ペアを生成するための乱数として利用されているのです)。

PuttyGen2

終了すると、生成された公開鍵ペアの情報が表示されます。

PuttyGen3

key_commentを必要に応じて修正し、パスワードを入力して、”Save private key”をクリックします。名前はなんでもかまいませんが、既定の拡張子(ppk)を利用するようにしてください。
また、上部の反転している部分をコピーして、適当なファイルに保存しておきます。ちなみに、保存し忘れた場合は、puttykeygen.exeを起動してから”Load”を選択して、保存した鍵情報を読み込ませれば、同じ内容が表示されます。
鍵の生成はここまでで終了です。

続いて、サーバに鍵情報を登録します(以下の手順はCentOS 5で確認)。

今回作成した公開鍵ペアを利用して接続する際に利用するユーザのホームディレクトリに、.sshというディレクトリがあることを確認します(一度でもsshで接続したことがあれば、自動的に生成されているはず)。

そのディレクトリの下に、”authorized_keys”という名前で新しいファイルを作成し、先ほど保存した鍵情報(上部で反転していた部分)をそのファイルの内容として貼り付けます。自分以外の人がそのマシンを利用するのであれば、自分以外の人がそのファイルを触れないように権限設定をしてください (chmodで700にする)。

ここまでの手順で公開鍵認証が利用できるようになっているはずですが、パスワード認証も相変わらず利用できてしまうので、パスワード認証を無効にする必要があります。sshの設定ファイル(管理人の環境では/etc/ssh/sshd_config)を開くと、

#PasswordAuthentication yes

このような行があるはずです。この行自体は設定としては無効ですが、デフォルトでパスワード認証が有効にされているということが読み取れます。この行を、以下のように書き換えます。

PasswordAuthentication no

書き換えてからファイルを上書き保存し、sshdを再起動すると、パスワード認証が無効になり、公開鍵認証のみが有効になります。

最後に、Puttyから公開鍵を利用して認証をするための設定をします。
これは簡単で、Putty起動後の設定画面で、利用する公開鍵を指定するだけです。

PuttyGen4

左側の”Category”の中のConnection – SSH – Authを選択してから、”Browse…”で先ほど保存した秘密鍵のファイルを指定します。Puttyには接続先のサーバに応じて設定内容を保存する機能があるので(手順はここでは省きますが)、その機能を利用すれば二度と設定する必要はありません。

この設定を行った上で、先に設定変更を行ったサーバに接続をすると、

login as: XXX
Authenticating with public key “rsa-key-20070910”
Passphrase for key “rsa-key-20070910”:
Last login: Mon Sep 10 01:40:36 2007 from 192.168.0.3
[XXX@www ~]$

このような形で認証が行われ、秘密鍵ファイルを持つ端末からのみアクセスができるようになります。
#”rsa-key-20070910″というのは、鍵ペア生成時のデフォルトのコメントです。

このような設定を行えば、/var/log/secureには山のようにブルートフォース攻撃がやってきますが、安心して外部からsshで接続することができるようになります。

コメントする