[リストへもどる]
一括表示
タイトルsudo+rsync+ssh+exceptによるバックアップの自動化
記事No8548
投稿日: 2014/05/13(Tue) 21:03
投稿者Mirage
お世話になります。

先日からファイルのバックアップ処理を自動化させようとしていますが、1週間程奮闘しても成果が上がらず、大変困っています。
詳細な状況を記述いたしますので、お手数ですが、どなたか助けて頂けないでしょうか?



サーバーが2台有り、バックアップ元(192.168.12.9)からバックアップ先(192.168.12.12)にログファイル等のroot権限が必要なファイルを自動的にバックアップさせようとしています。


●1.バックアップ元サーバー:
・CentOS5.5
・rootユーザを無効化しており、一般ユーザ(hogera)をsudoで権限昇格出来るようにしています。

●2.バックアップ先サーバー:
・CentOS5.5
・バックアップ元と同様に、一般ユーザ(hogera)が登録されています。

※また、SSHはどちらのサーバーでもパスワード認証を使用しています。



バックアップ先からsudo+rsyncを使用して、手動で

rsync -avvz -e "ssh -tt" --rsync-path="sudo rsync" hogera@192.168.12.9:/var/log/messages /home/hogera/

とすると、無事にバックアップ元からmessageが取得できます。

また、上記のコマンドをスクリプト化しても、同様にmessageが取得できます。


しかし、expectでパスワード入力処理を自動化したスクリプトを作成し、バックアップ先
で実行すると

protocol version mismatch - is your shell clean?
(see the rsync man page for an explanation)
rsync error: protocol incompatibility (code 2) at compat.c(69)

というエラーメッセージがコンソールに表示されてしまいます。


スクリプトは以下の通りです。

#!/bin/bash

expect -c "
spawn rsync -avvz -e \"ssh -tt\" --rsync-path=\"sudo\ rsync\" hogera@192.168.12.9:/var/log/messages /home/hogera
expect \"hogera@192.168.12.9's password:\"
send \"[Password]\n\"
expect eof
exit
"

このエラーメッセージの一般的な対処法として、rsyncのオプションにvvを追加
したものを手動で実行し、実行結果から

--server -ulogDtprz . /home/hogera/

等の文字列を抜き出して、バックアップ元の/root/.ssh/authorized_keysに

command="rsync --server -ulogDtprz . /home/hogera/" ssh-dss AAA...

と追加する方法が数多く紹介されていますが、この方法ではSSH接続時に実行可能なコマンドがrsyncに限定されてしまうのではないか(winSCPによる自動ファイルアップロード等、他にSSHが絡む機能も実装予定の為、実行可能なコマンドがrsyncに限定されると困る)?ということを懸念しています。



1.SSH接続時の実行可能コマンド制限の件は、私の思い違いでしょうか?
2.エラーメッセージの対処法は、間違っていないでしょうか?
3.他に良い方法は有りますか?


どうぞ宜しくお願いします。