パスワードなしでSSHログイン
対象ディレクトリのバックアップを作成し、コマンド一発でリモートサーバに転送する方法を書いたが、この方法だとパスワードを聞かれてしまう。バックアップは定期的かつ自動的に実行されて欲しいのだが、この方法では都度パスワードを入力しなくてはいけないので、自動的という訳にはいかない。パスワードの自動入力にはexpectを使う方法もあるが、そもそも入力しなくてもいいように設定してしまえば楽チンである。
まず事前にアカウントを作成しておくことにする。わかりやすいように、サーバ側(アクセスされる側・バックアップ先)、クライアント側(アクセスする側・バックアップ元)ともにbackupというユーザを作成することにする。当然クライアント側のバックアップしたいファイル群にはbackupの読み取り権限が必要になるので適宜設定しておく。
まずクライアント側で以下のコマンドを実行する。
ssh-keygen -t dsa
秘密鍵・公開鍵を作成する。この時、鍵の置き場所や鍵のパスフレーズを聞かれるが、何も入力せずに改行。でないと、サーバへのアクセス時にパスワードこそ聞かれないけれど、鍵に対するパスフレーズを聞かれることになってしまう(本末転倒)。
するとbackupのホームディレクトリに.ssh/というディレクトリが作成され、その中に以下のファイルが作成される
- id_dsa(秘密鍵)
- id_dsa.pub(公開鍵)
作ったディレクトリやファイルは誰にも触られないように、アクセス権限を変更しておく。
次に、公開鍵をサーバ側に転送する(何らかのセキュアな方法で)。サーバ側にもbackupというユーザを作成しておいた。backupのホームディレクトリに.ssh/というディレクトリを作成しておく。そして.ssh/authorized_keys2というファイルを作成し、先程の公開鍵の内容をコピペしておく。そして同様にアクセス権限を変更しておく。
以上で設定は終了だ。
いったんクライアント側からサーバ側にsshで接続してみる。最初はknown_hostsの登録がないので、登録するかどうか聞かれるのだが、以後はいきなりログイン出来るようになる。簡単なんだけど、ある意味怖いよね・・・。ま、しょうがないんだけど。