Tips記事
» 2002年02月06日 00時00分 UPDATE

ノンパスワードでログインしたい〜sshプロトコルバージョン1編〜

[木田佳克,ITmedia]

 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
[ykida@speed-rh]$ ssh-keygen
Generating public/private rsa1 key pair.
Enter file in which to save the key (/home/ykida/.ssh/identity):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ykida/.ssh/identity.
Your public key has been saved in /home/ykida/.ssh/identity.pub.
The key fingerprint is:
f9:85:e5:23:49:be:3e:a2:4d:5f:91be:3e:a2:63:19 ykida@speed-rh

※パスフレーズの変更は「ssh-keygen -p」で可能だ。ここでの表現を「パスワード」ではない「パスフレーズ」と記される理由には,文字列にスペースを含んでも構わないからだ。スペースを混在させるとパスフレーズクラックを防止できる確立が高くなるだろう

2. 念のため接続元からの接続が許可されているかを確認

[ykida@speed-rh]$ cat /etc/hosts.allow
ALL: localhost 192.168.0.

※上記の例では,すべてのサービス(ALL:)でlocalhostと192.168.0.xxxからのログイン許可を示している

3. 接続元でもssh-keygenを実行して暗号認証ファイルを作成する

[ykida@speed-ps]$ cd
[ykida@speed-ps]$ ssh-keygen
Generating public/private rsa1 key pair.
Enter file in which to save the key (/home/ykida/.ssh/identity):
/home/ykida/.ssh/identity already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ykida/.ssh/identity.
Your public key has been saved in /home/ykida/.ssh/identity.pub.
The key fingerprint is:
cf:51:fd:ba:fa:d4:fb:1d:8d:fa:d4:cf:56:fa:d4:a1 ykida@speed-ps

※ここまでで「.ssh/identity」と「.ssh/identity.pub」ファイルが自動生成された。途中で要求されるパスフレーズについては,前述した通りだ

[ykida@speed-ps]$ ls ~/.ssh/
identity  identity.pub known_hosts  known_hosts2

4. ~/.ssh/identity.pubファイルを接続先の~/.ssh/ディレクトリ下にauthorized_keysとしてコピーする

[ykida@speed-ps]$ scp ~/.ssh/identity.pub ykida@speed-rh:~/.ssh/authorized_keys
The authenticity of host 'speed-rh (192.168.0.175)' can't be established.
RSA key fingerprint is ae:d4:35:c2:45:38:db:f8:70:da:07:de:9f:87:c5:15.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'speed-rh,192.168.0.175' (RSA) to the list of known hosts.
ykida@speed-rh's password:
identity.pub 100% |*************************************************| 333 00:00

※上記の操作では,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
speed-rh,192.168.0.175 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAA
AIEA0XB8+g/dQODADE22F9geU+9qliHaXzNjLSTWFI9wT2wi GJjXRYvX6byinZ9CSg/dQODADE22g/dQODADE22FOlZZkZO
HQNyZqmR6viBM2xyIZFSAYFXkI288QlAYhsC+NvL8jYFFIKsd
Z6Fd/8n81ZqTh6Gg/dQODADE22FRXWWnSOuOsP0=

※上記のように,known_hostsにはRSAによる暗号内容が記述されている

 上記のscpによる手順の場合,接続先にすでに~/.ssh/authorized_keysファイルが存在する場合もあるため,取りあえず別名でコピーしておいてからauthorized_keysファイルの最後に追加するのが万全だろう。その手順例は次のようになる。

[ykida@speed-ps]$ scp ~/.ssh/identity.pub ykida@speed-rh:.
ykida@speed-rh's password:
identity.pub 100% |*************************************************| 333 00:00

※ 続いて接続先にログインしてから次のように操作する

[ykida@speed-rh]$ cd
[ykida@speed-rh]$ cat identity.pub >> ~/.ssh/authorized_keys
[ykida@speed-rh]$ rm identity.pub

※ 操作の最後には,上記のようにidentity.pubファイルを消しておこう

5. authorized_keysファイルのパーミッションを600に設定しておこう

[ykida@speed-rh]$ chmod 600 ~/.ssh/authorized_keys
[ykida@speed-rh]$ ls -l ~/.ssh/
合計 16
-rw-------1 ykidaykida 3332月5 23:20 authorized_keys

 パスフレーズを空で設定していた場合(もちろん薦められない),この時点でパスワード入力無しにログインができるようになっているはずだ。しかし,パスフレーズを設定した場合には,ログイン時に「Enter passphrase for key ...」といったパスワードの入力の代わりにパスフレーズを要求されるようになる。これではノンパスワードが実現されていない。この際にノンパスを実現するには,自力でパスフレーズを入力する代わりに「ssh-agent」と呼ばれるデーモンを利用して入力代行させるのが一般的だ。

 詳細は,「ssh-agentでパスフレーズを記憶させる」Tipsを参考にしてほしい。

関連Tips
ボタン ノンパスワードでログインしたい〜sshプロトコルバージョン2編〜

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ