*** rsyncとは、sshを使う理由とは [#xd7c8286]
- rsync(略文字忘れた)は、ファイルを同期しながらコピーしてくれる代物です。要するにバックアップソフト。~
同期という言葉にはミラーというのというのと同じ意味があるますが、rsyncはファイルが更新・削除された~
ものだけをコピーするオプションもあるし圧縮して送ることもできる。sshを使用した暗号化経由でも送付できる。~
とフリーなのに結構色々なことができます。
- sshを使う理由は、プライベートなネットワークでもハッキングされた場合の考慮を入れておきたいからです。~
一番簡単なリモートアクセス(r系コマンド)でも用途的には十分なのですが怖いじゃないですか。ね。
*** rsync+sshを使用する上においてのポリシー [#s339a194]
- 各種設定ファイルをバックアップすることを目的とするため、ssh経由でもrootで実行させたい。
- プライベートなアドレスのみ許可し、外部からのアクセスは禁止する。
- 各種設定ファイルは、tar+gzで固めた状態でバクアップマシンにコピーする。
- rsyncは自動化したい、そのためrootユーザのパスフレーズは空にしたい。
- そんなことをできるかググってみたところ、趣旨ぴったりのページに出会いました。~
最後の方は、ちょっと違うけどね(笑)
-- [[rsync + cron + ssh (rsyncd を立てない編)>http://www2s.biglobe.ne.jp/~nuts/labo/inti/cron-rsync-ssh-nodaemon.html]]
*** まずは前準備 [#lec4af40]
- 説明もこんがらがるので、COLOR(RED){''サーバ側''}、COLOR(GREEN){''バックアップ側''}として説明します。
- COLOR(RED){''サーバ側''}で、rootユーザのssh秘密鍵/公開鍵を作成します。~
このときrsyncで使用する再にパスフレーズを聞かれないように''空''フレーズとして指定します。
server# ssh-keygen -t dsa -N "" -f /root/.ssh/rsync
Generating public/private dsa key pair.
Created directory '/root/.ssh'.
Your identification has been saved in /root/.ssh/rsync.
Your public key has been saved in /root/.ssh/rsync.pub.
The key fingerprint is:
xx:b0:5b:31:xx:f1:xx:2e:3b:44:xx:a8:5b:99:af:88 root@ns
-- '''/root/.ssh''' ディレクトリに rsync, rsync.pub ファイルが作成されていることを確認する。
rsync → 秘密鍵
rsync.pub → 公開鍵
- COLOR(GREEN){''バックアップ側''}での、'''/etc/ssh/sshd_config'''を以下のように設定する。~
特に「''rootでのアクセスは、特定コマンドのみ許す''」は今回の目的のために修正するので必須です。~
[[OpenSSL/ OpenSSH(SSH2) + PuTTY の設定に関するメモ>http://www.sea-bird.org/doc/Qube3J/OpenSSL_SSH_SSH2.html]]などを参考にしてね。
# SSHプロトコルの指定
Port 22
Protocol 2
ListenAddress 192.168.0.xxx
# rootでのアクセスは、特定コマンドのみ許す
PermitRootLogin forced-commands-only
# RSA公開鍵認証
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
# .rhostファイルや通常のパスワード認証
RhostsAuthentication no
PasswordAuthentication no ← yes にすると、テキスト認証が可能です
PermitEmptyPasswords no
# wheelグループかadminグループに所属していないユーザーは、アクセス禁止
AllowGroups wheel admin
# hoge, hoge2 ユーザのみアクセスを有効にする
#AllowUsers hoge hoge2
# 最大起動数(SSHピンポンダッシュ)
MaxStartups 10:30:60
# 公開鍵などを保管するディレクトリ等の属性が適切に設定されているか
StrictModes yes
# ~/.rhosts or ~/.shosts ファイルの無効化
IgnoreRhosts yes
# チャレンジ・レスポンス認証
ChallengeResponseAuthentication no
-- 設定が終わったら、sshdを再起動します。
backup# /etc/rc.d/init.d/sshd restart
- COLOR(GREEN){''バックアップ側''}に、COLOR(RED){''サーバ側''}で作成した''rsync''の公開鍵(rsync.pub)を登録する。
backup# vi /root/.ssh/authorized_keys
ssh-dss xxxxxxxxx ← サーバ側の rsync.pub 内容を全て貼り付ける(追加)
backup# chmod 600 /root/.ssh/authorized_keys
*** rsyncコマンドのみを許す設定 [#iececabe]
- COLOR(RED){''サーバ側''}のsshに「'''PermitRootLogin forced-commands-only'''」と指定したことにより、ssh経由でrootユーザでの~
実行が可能となります。ただし許可されたコマンドのみ実行が可能なので、その登録方法を説明します。
- ここでも説明もこんがらがるので、COLOR(RED){''サーバ側''}、COLOR(GREEN){''バックアップ側''}として説明します。
- COLOR(RED){''サーバ側''}で、実際に実行するrsyncコマンドを実行してみます。
server# /usr/bin/rsync -vv -az -e "ssh -2 -i/root/.ssh/rsync" /backup/ root@192.168.0.xxx:/backup/
opening connection using ssh -2 -i/root/.ssh/rsync -l root 192.168.0.xxx rsync --server -vvlogDtprz . /backup/
protocol version mismatch - is your shell clean?
(see the rsync man page for an explanation)
rsync error: protocol incompatibility (code 2) at compat.c(60)
: 必ずエラーとなります | rsync error: protocol incompatibility (code 2) at compat.c(60)~
上記のエラーが表示されますが、ここでの注目して欲しい点は、「COLOR(RED){'''rsync --server -vvlogDtprz . /backup/'''}」です。~
このコマンド結果をCOLOR(GREEN){''バックアップ側''}に登録します。
- COLOR(GREEN){''バックアップ側''}の、''/root/.ssh/authorized_keys'' ファイルを開き ''rsync''の公開鍵(rsync.pub)で~
登録した行の先頭に上記で注目してという「COLOR(RED){''rsync --server -vvlogDtprz . /backup/''}」を追加します。~
実際には command="" というのを追加します。
backup# vi /root/.ssh/authorized_keys
command="rsync --server -vvlogDtprz . /backup/" ssh-dss xxxxxxxxx
- COLOR(RED){''サーバ側''}で再度rsyncコマンドを実行してみます。
server# /usr/bin/rsync -vv -az -e "ssh -2 -i/root/.ssh/rsync" /backup/ root@192.168.0.xxx:/backup/
opening connection using ssh -2 -i/root/.ssh/rsync -l root 192.168.0.xxx rsync --server -vvlogDtprz . /backup/
building file list ...
[sender] expand file_list to 131072 bytes, did move
done
delta transmission enabled
./
total: matches=0 tag_hits=0 false_alarms=0 data=2
- 上記のように表示されればokです。
*** 日々の運用について [#uf208765]
- これもポリシーを決めてから実際に運用した方がいいと思います。
- 私のポリシーは、全てのファイルをバックアップ対象ともよく設定ファイルとWebコンテンツをバックアップするようにします。
-- COLOR(RED){''サーバ側''}で下記のスクリプトを作成します。~
'''/backup/conf_backup.sh''' というファイルで作成してみました(w
#!/usr/bin/sh
cd /backup
# バックアップしたいファイルをtarにて固めます
/bin/tar cvf conf_backup.tar /etc/pam.d/su ← バックアップしたいファイルを列挙
# 3世代までバックアップをとります
if test -s conf_backup.tar.gz
then
test -f conf_backup_2.tar.gz && mv conf_backup_2.tar.gz conf_backup_3.tar.gz
test -f conf_backup_1.tar.gz && mv conf_backup_1.tar.gz conf_backup_2.tar.gz
test -f conf_backup.tar.gz && mv conf_backup.tar.gz conf_backup_1.tar.gz
fi
# 圧縮します
/usr/bin/gzip -f conf_backup.tar
# バックアップ側に、同期をとります
/usr/bin/rsync -vv -az -e "ssh -2 -i/root/.ssh/rsync" /backup/ root@192.168.0.xxx:/backup/
-- COLOR(RED){''サーバ側''}で上記スクリプトをcronに登録します。
# crontab -e
0 6 * * * sh /backup/conf_backup.sh
*** 参考にさせて頂いたサイト様 [#f79bdb86]
- [[rsync + cron + ssh (rsyncd を立てない編)>http://www2s.biglobe.ne.jp/~nuts/labo/inti/cron-rsync-ssh-nodaemon.html]]
- [[ネットワーク管理の基本テクニック(バックアップ編)>http://www.dadd9.com/tech/networkadmin_02.html]]