ssh(プロトコルバージョン1および2)による認証は,次のような手段が用意されている。
1. .rhostsファイルによる認証
rshの場合と同じように,~/.rhostsファイルや/etc/hosts.equivファイルによる認証を許す方法だ。この認証手段は静的なファイルに依存するため,危険であるため通常は利用されない。
2. RSA鍵によるホスト認証
~/.rhostsファイル,または/etc/hosts.equivファイルとRSA鍵によるホスト認証を組み合わせたもの。接続先の~/.rhostsファイルや/etc/hosts.equivに接続元が登録されていることに加え,同じく接続元のRSA公開鍵が接続先の~/.ssh/known_hosts(/etc/ssh_known_hosts)に登録されている必要がある。
3. RSA鍵によるユーザ認証
この手段を,ここでは詳細に解説していこう。
ssh(バージョン1および2)によるログインは,通常RSA認証で交わされる。そのため,事前にssh-keygenコマンドを実行して接続元,接続先それぞれにRSA鍵を作成しておく必要がある。ssh-keygenを実行すると,秘密鍵は~/.ssh/identityとして,公開鍵は~/.ssh/identity.pubファイルとして自動生成される。
以下に,ノンパスワードを実現させるための手順を順番に追っていこう。注意点として,接続元と接続先の違いをプロンプトで判断していただきたい。
接続元: speed-ps (プロンプトをパープルで表示)
接続先: speed-rh (プロンプトをイエローで表示)
アカウント: ykida
1. まず最初に接続先でssh-keygenを実行して暗号認証ファイルを作成しよう
[ykida@speed-rh]$ cd ※パスフレーズの変更は「ssh-keygen -p」で可能だ。ここでの表現を「パスワード」ではない「パスフレーズ」と記される理由には,文字列にスペースを含んでも構わないからだ。スペースを混在させるとパスフレーズクラックを防止できる確立が高くなるだろう |
2. 念のため接続元からの接続が許可されているかを確認
[ykida@speed-rh]$ cat /etc/hosts.allow ※上記の例では,すべてのサービス(ALL:)でlocalhostと192.168.0.xxxからのログイン許可を示している |
3. 接続元でもssh-keygenを実行して暗号認証ファイルを作成する
[ykida@speed-ps]$ cd ※ここまでで「.ssh/identity」と「.ssh/identity.pub」ファイルが自動生成された。途中で要求されるパスフレーズについては,前述した通りだ [ykida@speed-ps]$ ls ~/.ssh/ |
4. ~/.ssh/identity.pubファイルを接続先の~/.ssh/ディレクトリ下にauthorized_keysとしてコピーする
[ykida@speed-ps]$ scp ~/.ssh/identity.pub ykida@speed-rh:~/.ssh/authorized_keys ※上記の操作では,sshを利用したscpコマンドで安全に接続先(speed-rh)にykidaアカウントでコピーするという意味だ。接続元の「~/.ssh/identity.pub」を接続先では「~/.ssh/authorized_keys」としてリネームしている。この際,「Are you sure you want to continue connecting」と問い合わされたのは,初めてのsshログインであることを意味し,ここで「yes」を選択することで「known_hosts」ファイルが接続元に自動生成される [ykida@speed-ps]$ cat .ssh/known_hosts ※上記のように,known_hostsにはRSAによる暗号内容が記述されている |
上記のscpによる手順の場合,接続先にすでに~/.ssh/authorized_keysファイルが存在する場合もあるため,取りあえず別名でコピーしておいてからauthorized_keysファイルの最後に追加するのが万全だろう。その手順例は次のようになる。
[ykida@speed-ps]$ scp ~/.ssh/identity.pub ykida@speed-rh:. ※ 続いて接続先にログインしてから次のように操作する [ykida@speed-rh]$ cd ※ 操作の最後には,上記のようにidentity.pubファイルを消しておこう |
5. authorized_keysファイルのパーミッションを600に設定しておこう
[ykida@speed-rh]$ chmod 600 ~/.ssh/authorized_keys |
パスフレーズを空で設定していた場合(もちろん薦められない),この時点でパスワード入力無しにログインができるようになっているはずだ。しかし,パスフレーズを設定した場合には,ログイン時に「Enter passphrase for key ...」といったパスワードの入力の代わりにパスフレーズを要求されるようになる。これではノンパスワードが実現されていない。この際にノンパスを実現するには,自力でパスフレーズを入力する代わりに「ssh-agent」と呼ばれるデーモンを利用して入力代行させるのが一般的だ。
詳細は,「ssh-agentでパスフレーズを記憶させる」Tipsを参考にしてほしい。
関連Tips
ノンパスワードでログインしたい〜sshプロトコルバージョン2編〜
Copyright © ITmedia, Inc. All Rights Reserved.