鍵交換方式の認証には、公開鍵と秘密鍵のペアが必要ですが、これらの生成はクライアントかサーバのどちらかでまとめて行います。
一方で鍵のペアを生成した後、他方へ片方の鍵を渡します。
注意しなければならないのは、他方へ鍵を渡す際の方法です。
暗号化されていないネットワーク上をFTP やメールなどで渡すのは最も危険であり、暗号化されているSCP やSFTP の利用も望ましいものではありません。
鍵を渡す際には、ネットワークを一切経由しないメディア経由が最も安全です。
但し、鍵を渡した後にメディア(FD など)を紛失したならば意味はありませんので、メディア内の鍵を厳重に保管するなどの対策が必要です。
ここでは、鍵のペアをWindows のPutty で生成する場合とVine Linux で生成する場合の手順を説明します。
SSH バージョン1ではRSA暗号方式を、SSH バージョン2ではRSA 暗号方式とDSA 暗号方式を利用することが可能ですが、ここではバージョン2のRSA 暗号方式のみを扱います。
・ Windows(Putty)で鍵を生成する
Putty で鍵を生成するには、Putty 本体に付属しているputtyegen.exe というアプリケーションを使用します。
puttyegen.exe を起動したならば、メニューからSSH のバージョンと鍵の種類を選択します(ここではSSH2-RSA key を選択)。
Generate をクリックすると、鍵の生成が始まります。
マウスを適当に動かして鍵を生成します。
鍵を生成したならば、パスフレーズを決定します。
Key passphrase のフォームにパスフレーズを入力し、確認のためにConfirm passphrase にも同じパスフレーズを入力します。
パスフレーズを入力後、公開鍵と秘密鍵をそれぞれ保存します。
それぞれのファイル名は任意ですが、公開鍵は「.pub」、秘密鍵は「.ppk」の拡張子にする必要があります。
例では、公開鍵を「putty_public.pub」、秘密鍵を「putty_private.ppk」として保存して話を進めます。
保存した鍵のうち、秘密鍵はクライアントで保管、公開鍵はサーバへ登録します。
公開鍵をサーバへ移動する際には、FD などのメディアを使用するのが得策です。
公開鍵をサーバへ移動したならば、Putty で生成した公開鍵をOpenSSH 用に変換する作業が必要です。
変換は、以下のコマンドで行います。
尚、例ではすべての作業をホームディレクトリで行います。
$ ssh-keygen -i -f putty_public.pub > putty_public.pub
OpenSSH 用の公開鍵ができたならば、鍵を ~/.ssh/authorized_keys というファイルに登録します。
.ssh ディレクトリが無い場合には、新たにディレクトリを作成し、自分のみアクセスできるようにパーミッションを700にします。
また、authorized_keys というファイルが存在しない場合には、自動で新しく作成されます。
$ cat putty_public.pub >> /.ssh/authorized_keys
鍵を登録後、自分のみアクセスできるようにパーミッションを変更します。
$ chmod 600 ~/.ssh/authorized_keys
これでLinux サーバにSSH で使用する公開鍵が登録されます。
・ Linux で鍵を生成する
Linux で鍵を生成するには、ssh-keygen コマンドを使用します。
以下のコマンドで、秘密鍵と公開鍵の両方を生成する事ができます。
鍵の生成の際、パスフレーズを入力します。
また、作業はホームディレクトリで行う場合の例です。
$ ssh-keygen -t rsa <--- RSA 鍵の生成コマンド
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ユーザ名/.ssh/id_rsa): <--- Enterを押して鍵を保存
Enter passphrase (empty for no passphrase): <--- パスフレーズを2回入力
Enter same passphrase again:
Your identification has been saved in /home/ユーザ名/.ssh/id_rsa. <--- 秘密鍵
Your public key has been saved in /home/ユーザ名/.ssh/id_rsa.pub. <--- 公開鍵
The key fingerprint is:
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX ユーザ名@localhost.localdomain
鍵のファイルができているかどうかは、ls コマンドで確認できます(ls ~/.ssh/)。
id_rsa.pubが公開鍵、id_rsaが秘密鍵です。
次に、 .ssh/authorized_keys へ鍵を登録します。
$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys
鍵を登録後、自分のみアクセスできるようにパーミッションを変更します。
$ chmod 600 ~/.ssh/authorized_keys
これでLinux サーバにSSH で使用する公開鍵が登録されます。
Linux で生成した秘密鍵(ここでは id_rsa)をWindows クライアントで使用したい場合には、このファイルをWindows へ移動します。
Windows へファイルを移動した後、SSH クライアントソフトで鍵を読み込みます。
ここでは、Putty に秘密鍵を登録する手順について説明します。
Putty のputtygen.exe を起動し、Linux で生成した秘密鍵を読み込みます。
読み込む際には、拡張子を「Allすべてのファイル」にしないと表示されないので注意して下さい。
読み込む際には、パスフレーズを尋ねられます。
ファイルが読み込まれると、鍵とパスフレーズが表示されます。
Praivate key の保存を選択し、Putty 用に秘密鍵を保存します。
保存場所は任意ですが、秘密鍵の管理は厳重に行う必要があります。