2009年10月12日月曜日

FreeBSD でサーバ構築 #A SSH と公開鍵認証

SSH の設定について,直接コンピュータを触れる環境であれば,特に SSH を使ってリモートからログインする必要はないわけだが,ファイルをコピーする必要があったり,外出先からログインする必要があったりするときには便利なので,その設定を解説する.

リモートからパスワードログインをするだけであれば,次のように設定するだけで,好きな SSH クライアントからアクセスできるようになる.

1. /etc/rc.conf に次の行を追加する.
sshd_enable="YES"

2. 再起動するか,次のコマンドを実行する.
# /etc/rc.d/sshd start

これだけだ.たとえば,Mac OS X のターミナルからログインしたい場合は,次のようなコマンドを打ち,プロンプトに従ってパスワードを入力するだけでいい.
$ ssh takuya@192.168.1.254(ユーザ名@ホスト名の形になる.)

はじめての接続のときに,yes/no のプロンプトがでるが,yes と答えておこう.これは,接続先ホストを known_hosts に加えるかという質問で,known_hosts に記述されているホストに再度接続しようとした場合に,そのホストが前回接続したホストと同一かということをチェックするための仕組みになっている.(同じホスト名で接続しても,実際のコンピュータが同一でなく,ログインパスワードを盗まれるようなダミーサーバに接続しているということが考えられるので,このような仕組みでチェックしている.)

しかしながら,このような方法だとパスワードが暗号化されているとはいえ,パスワードを入力するという作業が伴うため,ヒューマンエラーによってパスワードを露呈してしまう可能性がある.(たとえば,ログイン名としてパスワードを入力してしまうようなミス.)したがって,極力パスワードを入力せずにログインするようにしたい.

SSH には,そのためのログイン方法のひとつとして,公開鍵認証が含まれている.公開鍵認証についての説明はこのエントリ内で解説できる内容ではないので割愛する.また,SSH が公開鍵認証をどのように使っているかについても割愛する.詳細が知りたい方は,参考文献を読んでほしい.

ひとつ言えることは,公開鍵認証によって安全性が高まるということだ.公開鍵認証時に必要なのは,鍵となるファイルとその鍵を手元で複合するパスフレーズ(まあ,パスワードみたいなものだ.)となる.パスワードひとつだけよりも安全そうな気がすると思うw鍵もパスフレーズもネットワーク上を流れない認証方式なのでより安全ということだ.鍵を誰かに奪われても,パスフレーズがないと使えないしね.

では,公開鍵認証をできるように設定してみよう.前述の設定を行って,パスワード認証ができる状態であるとする.公開鍵認証の設定は,Mac OS X のターミナルから行う.

1. 鍵を生成する.
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/takuya/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

2. 鍵を配置する.鍵の保存用ディレクトリ(ssh の known_hosts なども入る.)を接続先ホストに作成し,そこに authorized_keys というファイルを作成し,公開鍵の情報を追記している.
$ ssh takuya@192.168.1.254 'mkdir .ssh'
$ cat .ssh/id_rsa.pub | ssh takuya@192.168.1.254 'cat >> .ssh/authorized_keys'


これで完了♪公開鍵認証で接続するときもコマンドは同じで,公開鍵認証が自動的に使用されるようになる.
$ ssh takuya@192.168.1.254


WAN からのアクセスも許容する場合は,公開鍵認証のみを使用するように設定しよう./etc/ssh/sshd_config の次の行を変更する.
# Change to no to disable PAM authentication
#ChallengeResponseAuthentication yes
ChallengeResponseAuthentication no(この行を追記する.)

なんで,PasswordAuthentication no の追記でないのかということが気になると思う.不勉強なので正確性に欠けるかもしれないが,簡単に説明しよう.まず PasswordAuthentication は FreeBSD 7.1-RELEASE の SSH のデフォルト設定は no になっているので,パスワード認証はされない.しかし,ChallengeResponseAuthentication のデフォルト設定は yes になっている.さらに,チャレンジレスポンス認証は,UsePAM が yes になっているため PAM を使用するようになっているので,PAM のデフォルト設定上パスワード認証になるということだ.

あと,WAN からのアクセスを行う際に,間にルータがある場合は TCP 22番のポートマッピングを設定することを忘れないようにしよう.

以上,ざっと簡単に SSH の解説を行った.ちょっと適当に流してしまったので,ちゃんと勉強したい人はもっときちんと説明している Web サイトを参照したり,参考文献にあげた本を参照してね.

あー,そういえば,Leopard からキーチェーンと連動する ssh-agent っぽい機能が付いたみたいで,かなり便利♪裏側がどーなってるか知らないから,ちょっとわからない部分があってとまどうけどね…….

参考文献:
実用SSH 第2版―セキュアシェル徹底活用ガイド
ARAKI notes: ssh-copy-idがmacにないの不便だなあ,と一瞬おもったのでcopyしてくる

0 件のコメント: