ログインしたいホストの管理者から,このホストはsshのRSA認証でしかログインを許可していないと言われました。通常のsshによるログインと何が違うのでしょうか。また,どのように使用するのでしょうか。
RSA認証ではパスワードの代わりにユーザーのパソコンに格納した暗号かぎを使って認証を行います。かぎの登録に手間がかかりますが,パスワード認証に比べて安全性を高められます。

ssh(secure shell)を利用すれば,ログインやファイル転送を安全に行えます。通信路が暗号化されますので,途中のネットワーク経路上でパケットを盗聴(キャプチャ)されても,パスワードや通信内容が漏れる危険性を大幅に下げられるためです。UNIX系OSだけでなくWindowsやMacOSで実行できるsshクライアントもあり,telnetやFTPといったサービスを安全に置き換える方法として広く利用されています。

しかし,sshもパスワード認証を利用している限りパスワード盗用の危険性を避けることはできません。ユーザーが不適切なパスワードを設定した場合,わずかな試行でパスワードを探り当てられることもあり得ます。パスワード認証では「パスワードを知っていること」だけが正しいユーザーと判断する根拠となっているため,いったんパスワードが漏洩すると,第三者であっても簡単にログインができてしまいます。

ログイン可能なマシンをIPアドレスやホスト名で限定することで,多少安全性を高めることはできます。しかし,ユーザーが自宅からダイヤルアップ接続でアクセスするなど,IPアドレスが変動する可能性があるケースにも対処したい場合は,この方法は採用できません。

かぎの事前登録で安全性向上

RSA認証を利用するとパスワード認証に比べて,より安全性の高い認証が可能になります。RSAとは公開かぎ暗号化方式の一つで,情報の暗号化と復号化に「公開かぎ」と「秘密かぎ」の2つを利用する暗号化方式です。公開かぎを使って暗号化した情報は対応する秘密かぎでしか復号できず,秘密かぎで暗号化した情報は対応する公開かぎでしか復号できない特性を持っています。

この特性を利用すれば,あらかじめsshサーバーにユーザーのRSA公開かぎを登録しておくことで,そのユーザーのRSA秘密かぎを所持しているPCからしかアクセスを許可しないようにできます。これがRSA認証です。かぎの照合だけでは他人にPCを不正使用された場合に不正アクセスを許してしまいますが,RSA認証時にはパスフレーズと呼ばれるキーワード入力も併用されますので,その場合でもパスワード認証と同程度の安全性を確保できます。パスフレーズにはパスワードよりもはるかに長い文字列を設定できます。

なお,sshでは2つのプロトコルが利用されています。当初から利用されていたSSHプロトコル・バージョン1と,よりセキュリティを高めたSSHプロトコル・バージョン2です。RSA認証はどちらのバージョンでも利用できますが,かぎの形式が異なるなどの違いがあります。また,バージョン2ではRSAだけではなくDSA(Digital Signature Algorithm)という別の公開かぎ暗号化方式も利用できます。

かぎの生成と設定

RSA認証を利用するには,公開かぎと秘密かぎのペアを生成しなければいけません。生成にはssh-keygenコマンドを以下のように実行します。

C$ ssh-keygen

コマンド実行時に生成したかぎファイルを保存する場所とパスフレーズを聞かれます(図1)。保存場所はデフォルトのままでよいでしょう。デフォルトではユーザーのホーム・ディレクトリにある.sshディレクトリ中のidentityファイルに秘密かぎが,identity.pubファイルに公開かぎが保存されます。パスフレーズはセキュリティの最後のとりでとなりますので,他人に推測されにくい,十分な長さを持つものを入力してください。


$ ssh-keygen
Generating public/private rsa1 key pair.
Enter file in which to save the key (/export/home/ono/.ssh/identity):
Enter passphrase (empty for no passphrase): パスフレーズ
Enter same passphrase again: パスフレーズ
Your identification has been saved in /export/home/ono/.ssh/identity.
Your public key has been saved in /export/home/ono/.ssh/identity.pub.
The key fingerprint is:
4e:6d:5g:6c:76:ac:3f:51:58:e1:dd:0f:5c:c9:ac:53 ono@testhost
図1 RSA公開かぎ/秘密かぎの生成
ssh-keygenコマンドを利用すると,RSA認証に必要な公開かぎと秘密かぎが生成できます。パスフレーズはパスワードの一種ですが,文章のような長い文字列を設定できます。

SSHプロトコル・バージョン2に対応したRSA公開かぎ/秘密かぎ,あるいはDSA公開かぎ/秘密かぎのペアを作成する場合は,ssh-keygenコマンドに-tオプションを指定して次のように実行します。

$ ssh-keygen -t rsa
$ ssh-keygen -t dsa

SSHプロトコル・バージョン1用のかぎとは異なり,秘密かぎが./.ssh/id_rsa(./.ssh/id_dsa),公開かぎが./.ssh/id_rsa.pub(./.ssh/id_dsa.pub)というファイルに生成されます。

sshサーバーが動作している接続先ホストにログインできるようにするには,sshkeygenコマンドで生成した公開かぎを登録する必要があります。登録には,接続先ホストの自分のホーム・ディレクトリにある.ssh/authorized_keysファイルに公開かぎの内容を追加します(図2)。同ファイルが無い場合は新規に作成します。


1024 35
1477467165838638837660656029580175967077370353600956139918886115575627977
4266995201368151463562373126970312534150453532753374791496885350727019514
1289869841631870217262650016879504805396099223558313535583438088142468348
8726462148131378766999335387861995663030597345383762640698187957694279118
28872468598543829 ono@testhost
図2 登録する公開かぎの例
ssh-keygenコマンドで生成したRSA公開かぎを,サーバーの./.ssh/authorized_keysファイルに追加します。公開かぎはテキスト・ファイルですので,内容をコピー・アンド・ペーストしても構いません。

生成した秘密かぎは決して漏らさない(他人に渡さない)ようにしてください。

以上の準備が完了すれば,ssh -keygenコマンドを実行したマシンから,公開かぎを登録したsshサーバーのログイン時にRSA認証が利用できるようになります。ssh-keygenコマンドを実行したマシン以外からログインしたい場合は,そのマシンでかぎを生成してサーバーに公開かぎを登録するか,既に生成した秘密かぎをコピーします。秘密かぎは大変重要なものですので,転送は安全な方法で行ってください。メール添付などではなく,可能ならフロッピ・ディスクや端末同士を直接接続して転送するようにしましょう。

(回答者:小野 信一郎)