公開鍵暗号を利用したパスワード無しでのssh接続

4月 24, 2009 · Posted in MJ::Blog 

サーバーのデータのバックアップをすることになった。
今回サーバーはレンタルサーバーなのでテープとか外付けHDD付けたりとか出来ない。かといってサーバー内ではサーバーがこけたときにいっしょにこけてしまう。と言うわけで、別のサーバーに転送することにした。rsync + ssh にて。

バックアップに限らず自分のマシンからsshでリモート接続する場合にもいえるのでメモがてらエントリー。

sshを経由したrsyncを行う処理を自動化しようとしても sshアクセス時にパスワードを求められて自動化できない。ローカルマシンから sshでアクセスするときも ID/PW(保存できるソフトもあるけど)を毎回入力するとたまに忘れて、なんだっけと調べることになる。

でパスワード無しでの ssh接続。いわゆる公開鍵暗号方式を使う方法である(参照:公開鍵暗号でSSHのセキュリティを高める)。
自分のマシンでもやろうと思ってずっと保留にしていたのでこの機にがつっとやってしまうことにした。

公開鍵・秘密鍵のペアの作成

ローカルマシンにて公開鍵・秘密鍵のファイルを作成する

$ ssh-keygen -t dsa(またはrsa) -N ''

鍵ペアの名称をカコイイのにしたければ

$ ssh-keygen -t dsa -N '' -f ~/.ssh/otokomae-dsa

とかでw

これで、otokomae-dsa, otokomae-dsa.pub の2つのファイル(ファイル名未指定だと、id_dsa, id_dsa.pubかな)が作られる。前者が秘密鍵、後者が公開鍵である。

公開鍵をリモートサーバーに登録

作成した公開鍵(otokomae-dsa.pub)を接続先のリモートサーバーに登録する。
接続先のサーバーの authorized_keys と言うファイルに作成した公開鍵を登録することになる。

example.com サーバーのユーザー:bob で接続を行いたい場合は、example.comサーバーの bobユーザーの ~/.ssh/authorized_keys に登録する。
具体的には SCPなどで otokomae-dsa.pub を bob@example.com に転送して

example.com$ cat ~/otokomae-dsa.pub >> ~/.ssh/authorized_keys

などとして登録する。 authorized_keys に otokomae-dsa.pub の中身がそのまま記述されればよい。
と書いてるけど、ssh-copy-id があればもっと簡単。鍵ペアを作ったローカルマシンにて

$ ssh-copy-id -i ~/.ssh/otokomae-dsa.pub bob@example.com

で登録ができる。もちろんこの場合 bobユーザーでアクセスする場合にパスワードを求めらるので、パスワード入力でアクセスできるのが前提である。

アクセスしてみる

あとは、実際にパスワードを入力しないでアクセスできるかのテスト。

ssh -i ~/.ssh/otokomae-dsa -l bob example.com

もしダメだった場合は -v オプションとかつけてみるとどこでダメか見れるかも。
接続先サーバーの ~/.ssh と ~/.ssh/authorized_keys のパーミッションがおかしい場合にダメだったりします(自分はここでつまずいた)。それぞれ 700, 600 となっているかを確認してみて下さい。

参考サイト:


Comments

Leave a Reply