* rsync専用の秘密鍵を使ってサーバ間でrsyncする [#o86c6ca5]
** 目的 [#vd990bf4]
rsyncを使い、リモートサーバからローカルサーバへファイルをコピーする。rsyncはSSH経由とするが、パスフレーズなしにしてセキュリティを弱める代わりに、任意のコマンドを実行できないようにする。rsyncでファイルコピーするためだけの秘密鍵を使ってSSH接続することにする。
** 前提 [#he832df9]
rsyncコマンドをSSH経由でサーバ間で実行する場合、ローカルサーバでrsyncコマンドを実行後、自動的にリモートサーバでもrsyncコマンドが実行される。2つのrsyncコマンドが通信することで、ファイルのコピーが行われる。
** 手順 [#e0717670]
*** ローカルサーバでパスフレーズなしの秘密鍵・公開鍵を作る [#x4e6493f]
鍵のファイル名はわかりやすくしておく。
ssh-keygen -t rsa -N '' -f id_rsa_for_backup
*** リモートサーバに公開鍵を登録する [#fc114c75]
authorized_keysファイルは以下のようになる。
ssh-rsa AAAA123467890abcdefegAbcdefg123467890abcdefegAbcdefg
123467890abcdefegAbcdefg123467890abcdefegAbcdefg== taro@local-server.FOR.BACKUP
*** ローカルサーバでrsyncを試す [#y08aa3a0]
vvオプションをつけるのがポイント。
rsync -azvv -e 'ssh -i /home/taro/.ssh/id_rsa_for_backup' remote-server.net:tmp/ /home/taro/tmp/
すると、次のようにリモートサーバで実行されるrsyncコマンドを確認出来る。
opening connection using ssh -i /home/taro/.ssh/id_rsa_for_backup remote-server.net rsync --server --sender -vvlogDtprz . tmp/
receiving file list ...
「rsync --server」以降がリモートサーバで実行されるrsyncコマンド。
「rsync --server」以降がリモートサーバで実行されるrsyncコマンド。なお、このrsyncコマンドはオプションまで含めて正確でなければならない。例えば、別のディレクトリを指定するrsyncも実行したい場合は、そのコマンド用の鍵の登録を別に行う。
*** リモートサーバのauthorized_keysにcommandを指定する [#k6ea6c3c]
上で確認できたrsyncコマンドの全文を正しく、command=""に記述する。
command="rsync --server --sender -vvlogDtprz . tmp/" ssh-rsa AAAA123467890abcdefegAbcdefg123467890
abcdefegAbcdefg123467890abcdefegAbcdefg123467890abcdefegAbcdefg== taro@localserver.FOR.BACKUP
*** 正しくrsync出来ているか確認する [#x6af5bab]
以下のようにローカールサーバからrsyncコマンドを実行して、ファイルがコピーされたか確認する。
rsync -az -e 'ssh -i /home/taro/.ssh/id_rsa_for_backup' remote-server.net:tmp/ /home/taro/tmp/
また、次のように、シェルログインなど、rsyncコマンド実行以外のSSH接続は出来ないことを確認する。
ssh -v -i /home/taro/.ssh/id_rsa_for_backup remote-server.net