セキュアな認証のためにsshdを動かすので、ここで設定に問題があると致命的なセキュリティ問題になります。sshdの設定ファイルは/etc/ssh/sshd_configです。
SSHクライアントの設定ファイルは、システムレベルで/etc/ssh/ssh_configに、ユーザレベルで~/.ssh/configです。サーバが許可している項目でもクライアント側で許可してなければ利用できません。
以下はグローバルHost *に設定すると良いでしょう。
以下は特定のホスト名に対して利用すると良いでしょう。
例えば以下の様にHost設定を並べる事になります。
Host web
HostName www.hogehoge.too.long.*****.jp
User webadmin
Host ftp
HostName ftp.hogehoge.too.long.*****.jp
User ...
あなたが普段利用しているのはパスワード認証でしょうか?もしそうなら、少しでも強固な認証方式を採用してみませんか?
鍵を作成するのはどのコンピュータであっても構いませんが、基本的にはクライアントで公開鍵/秘密鍵を生成して、サーバへ公開鍵を送付します。クライアントにはアルゴリズムにつきひとつの公開鍵/秘密鍵があればよく、公開鍵はどの様に(メール添付やftpでもOK)配布しても構いません。逆に秘密鍵は秘匿しておかなければなりません。
鍵を生成するツールは、ssh-keygenです。鍵の種類にはSSH1のRSA1とSSH2のRSA/DSAがあり、デフォルトではSSH2のRSAが生成されます。DSAを利用する場合は-t ”dsa”を指定します。またコメントに-C "ユーザ名など"(デフォルトではユーザ名@コンピュータ名.ドメイン名)を指定して、サーバで登録する際に分かりやすくしておきます。
$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/weise/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/weise/.ssh/id_rsa. Your public key has been saved in /home/weise/.ssh/id_rsa.pub. The key fingerprint is: 34:13:d9:bb:9a:31:f3:f8:52:e4:f9:a3:b9:ae:2a:dc weise@*****.localdomain
秘密鍵のパスフレーズを入力した場合は、万が一に秘密鍵が漏洩した場合でもパスフレーズ認証によってセキュリティが確保されます。デフォルトで生成されるファイル名は以下の通りです。
| 種類(-tオプション) | 秘密鍵 | 公開鍵 |
| rsa | ~/.ssh/id_rsa | ~/.ssh/id_rsa.pub |
| dsa | ~/.ssh/id_dsa | ~/.ssh/id_dsa.pub |
| rsa1(SSH1用) | ~/.ssh/identity | ~/.ssh/identity.pub |
サーバが(公開鍵認証では無く)パスワード認証も許可していれば、この段階でscpで送信できます。でなければメールやUSBメモリなどを駆使してください。ここでサーバ側の~/.sshにid_rsa.pubがあるかもしれませんが、これはサーバ側コンピュータの公開鍵なので間違って上書きしないように注意してください。
$ scp ~/.ssh/id_rsa.pub [user@]host:
ここから、サーバ側での作業です。生成した公開鍵はサーバ側のログインするユーザの~/.ssh/authorized_keysに追加します。
$ cat id_rsa.pub >> ~/.ssh/authorized_keys
公開鍵となるauthorized_keysファイルは644に、またホームディレクトリは755以下、秘密鍵は600以下でないといけません。つまり認証にかかわるファイルが他のユーザから変更されないかどうかsshサーバが確認しています。
$ chmod 644 ~/.ssh/authorized_keys
sshdサーバで公開鍵認証を許可しているか確認しておきましょう。SSH1であればRSAAuthenticationを、SSH2ではPubkeyAuthenticationをyesにします。どちらもデフォルトでyesなので、拒否していなければ問題ありません。そのほかAuthorizedKeysFileオプションで、公開鍵ファイルへのパスを任意指定することができます。
全ての認証を公開鍵認証に切り替えるとPasswordAuthenticationをnoにすることができ、秘密鍵が無い状態でログインしようとすると以下の様に拒否されます。
Permission denied (publickey,gssapi-with-mic).
クライアント側となるユーザがいる場合で、ユーザに公開鍵/秘密鍵を生成する知識が無い場合やクライアントにssh-keygenが無い場合に生成してあげる必要がでてきます。
鍵を生成するときに鍵ファイル名を指定します。~/.sshに置かれるid_rsaなどのファイルは、そのサーバ側コンピュータでのユーザがSSHクライアントとなる場合のために用意されるものです。-C "ユーザ名"も指定しておくとauthorized_keysファイルが見易くなります。
Enter file in which to save the key (/home/weise/.ssh/id_rsa): id_rsa_user
ファイル名を相対パス指定すると、ssh-keygenを実行したディレクトリに置かれます。
$ ls -la id_rsa_user* -rw------- 1 weise weise 1675 11月 17 22:47 id_rsa_user -rw-r--r-- 1 weise weise 404 11月 17 22:47 id_rsa_user.pub
公開鍵は上記と同様にauthorized_keysファイルに追加します。
また秘密鍵をクライアントに配布しなければなりません。SSH認証でクライアントに接続できるなら、scpでコピーしても構わないでしょう。ですがメール添付をしてはいけません。他にもftpやhttpなどの暗号化されてない経路で秘密鍵を送信しては、秘密鍵が秘匿できません。USBメモリやフロッピーなどを駆使してください。
鍵をサーバ管理者に生成してもらった場合など、鍵ペアが複数になって秘密鍵も複数になり、~/.ssh/id_rsaファイルなどを管理しなければなりません。デフォルトでは~/.ssh/id_rsaですが、必要に応じてファイル名を変えて、SSHクライアントで随時秘密鍵を指定します。
saver1にはデフォルトの鍵で接続
$ ssh saver1.*****.jp
saver2には専用鍵で接続
$ ssh saver2.*****.jp -i ~/.ssh/id_rsa_user
公開鍵認証におけるパスフレーズは、直接サーバへの認証に使われるものではありません。秘密鍵を復号化する際にキーとなるものです。公開鍵を変更しなくても秘密鍵のパスフレーズを変更する事が出来ます。
ssh-keygenで、パスフレーズ変更オプション-pと秘密鍵ファイルを-fで指定します。
$ ssh-keygen -p -f ~/.ssh/id_rsa Enter old passphrase: Key has comment '/home/weise/.ssh/id_rsa' Enter new passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved with the new passphrase.
もし秘密鍵が漏洩した場合は、パスフレーズの変更だけでは意味がありません。古いものを破棄して、新たな公開鍵/秘密鍵ペアを作成する必要があります。
デフォルトのままGnomeを利用していれば、gnome-sessionはssh-agentを起動している事でしょう。
/usr/bin/ssh-agent /usr/bin/dbus-launch --exit-with-session /etc/X11/xinit/Xclients
これはSSH認証をssh-agentが起動してから終了するまで、認証を記憶しておくアプリケーションです。ssh-addコマンドで秘密鍵を追加しパスフレーズを入力します。ファイル名を省くとデフォルトのファイルを扱います。
$ ssh-add ~/.ssh/id_rsa
公開鍵認証の場合は一度パスフレーズを入力して認証成功すると、ssh-agentは復号化された秘密鍵を保持します。ssh-agentを終了するまでパスフレーズの入力が不要になります。自宅であれば良いかもしれませんが、オフィスなどでPCから席を立つ場合に、誰かが勝手にパスフレーズ無しでリモートサーバにログインされてしまうかもしれません。
ssh-agentの便利性と危険性を理解した上で、席を立つときに必ずgnome-screensaverの機能などでシステムをロックします。その習慣が出来なければ、ssh-agentを起動させないようにしてしまうべきでしょう。