sshで公開鍵認証を使ってアクセスする

  • 16
    いいね
  • 1
    コメント
この記事は最終更新日から1年以上が経過しています。

あまりに基本的すぎるけど、基本的過ぎて、ときどき大事な設定を忘れている解説がある。念のため、備忘録としてまとめておく。なお、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

<>の中身は、各設定に応じて変えてください。