あまりに基本的すぎるけど、基本的過ぎて、ときどき大事な設定を忘れている解説がある。念のため、備忘録としてまとめておく。なお、Linux, Mac OS XなどのUnix系統のパソコンじゃないとこの解説は意味がないので、windowsの人は無視すること
自分のパソコンですること
公開鍵と秘密鍵を作ろう。どのディレクトリでもかまわないが、結局、.sshのディレクトリに移すことになるので、.sshの下でやるのが効率的だ。
$ cd ~/.ssh
$ ssh-keygen -t rsa -f <filename>
上記のコマンドが実行されると、<filename>というファイルと、<filename>.pubというファイルができる(は適宜、自分で指定しよう)。前者が秘密鍵、後者が公開鍵。この後、公開鍵<filename>.pubを公開鍵認証でアクセスしたいサーバにコピーする
$ scp <filename>.pub <hostname>:.ssh/.
その後、.sshにid_rsaがない場合は、秘密鍵をid_rsaという名前に変更する
$ mv <filename> id_rsa
$ chmod 600 id_rsa
最後のパーミッションの設定を忘れると動かないので注意
ホスト側
アクセスしたいホストコンピュータでも、.sshにコピーしたファイルを操作する。
$ ssh <hostname>
<パスワードによるログイン>
$ cd .ssh
$ cat <filename>.pub >> authorized_keys
$ chmod 600 authorized_keys
$ exit
確認
ふたたび、ホストコンピュータにアクセスして、パスワードなしで入れれば、成功。
$ ssh <hostname>
$
トラブルシューティング
.sshディレクトリがない
つくりましょう。
$ mkdir .ssh
$ chmod 700 .ssh
全部言われた通りに設定したのに動かない
大抵の場合、パーミッションの設定が間違っています。
$ ls -al .ssh
でアクセス権を確認して、クライアント、ホストコンピュータのid_rsa, authorized_keysのアクセス権が600になっているか確認しましょう。なっていなかったら、
$ chmod 600 <target>
として変更しましょう。ごくまれに、authorized_keysと命名するべきなのに、authorized_keyと単数系にしたり、スペルミスでうまくいかないこともあります。
既にid_rsa, authorized_keysがある
authorized_keysファイルが既に存在しても、そのファイルの続きに今回、作成した公開鍵を足せば動きます。id_rsaがある場合は、秘密鍵を別の名前で保持して、
$ ssh -i ~/.ssh/<privatekey> <hostname>
とアクセス時に明示的に指定するか、.ssh/configファイルを作成し、その中で、どのホストにどの秘密鍵を使うのかを記述すると良いと思われます。以下、記述例です。
Host <hostname or nickname>
HostName <hostname or ip address>
User <username>
Port <port number>
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile ~/.ssh/<privatekey>
IdentitiesOnly yes
LogLevel FATAL
<>の中身は、各設定に応じて変えてください。