回答:
ほとんどのLinuxディストリビューションでこれを毎日行うには、rsync
コマンド(@guidoの回答による)をスクリプトに入れて、そのスクリプトを/etc/cron.daily
ディレクトリに入れるだけです。anacron
インストールされている限り(デフォルトではない場合があります)、ミスしたcron.daily
ジョブは、マシンの次回起動時に追いつきます(マシンが切り替えられた場合は真夜中に実行されます)。
スクリプトの場合は、次のようにします。
#!/bin/sh
rsync -a user@serverB:/source/folder/ /destination_folder
-z
バックアップが低速な(接続が遅い)接続である場合、または帯域幅を節約したい場合は(圧縮)オプションを追加できますが、私の経験では、実際には最新のマシン/ネットワークのパフォーマンスが低下します。
各バックアップのログを保持したい場合、次のようなことができます。
#!/bin/sh
rsync -av user@serverB:/source/folder/ /destination_folder \
>/var/log/backup_log 2>&1
これがcronジョブとして機能するには、serverAのrootがserverBにログインするためのパスワードなしのsshをセットアップする必要があることに注意してください。ジョブはrootとして実行されるため、rootアカウント(つまり、のキー/root/.ssh
)でなければなりませんcron.daily
。
anacron
ユーザーごとのcron
ジョブを取得しません。ただし、特定のユーザーとしてrsyncを実行するには、常にスクリプトのsu
/ sudo
を使用できます。ただし、キーはにより安全に保持されることに注意してください/root
。
ls -l
いくつかのファイルの出力を質問に追加すると、人々はさらにアドバイスを与えることができます。
rdiff-backupを使用することをお勧めします。今では、毎晩、自分のデータ(他のサーバーの2つのワークステーション、2つのサーバー、1つのアカウント)の自動増分バックアップを作成するために使用しています。
これには以前にrsyncを使用しましたが、rdiff-backupに切り替えた方が便利であり、仮想マシンのディスクイメージなどの大きなファイルの増分バックアップを作成できるためです。rdiff-backupは以前のrsyncバックアップスクリプトとよく似ていますが、完了しましたます。
バックアップが保存されているマシンの/etc/cron.dailyにスクリプトファイルを配置しました。これは、毎日1回、早朝にrdiff-backupを開始し、リモートマシンからデータを取得します。
これまでのすべての回答に加えて、SSHキーに依存しており、そのキーを使用してログインしたときに実行できる操作に制限があります。
この場合、別のユーザーを作成するか、既存のユーザー名のいずれかを使用することはそれほど重要ではありませんが、私であれば別のユーザーを作成します。bkpuser
以下の例では、両方のサーバーのユーザー名を使用します。
ログインしたらbkpuser
、パスワードなしでSSHキーを作成します。
で有効にPubkeyAuthentication
しsshd_config
ます。
ユーザーを作成しますbkpuser
。非常に複雑なパスワードを設定するか、そのユーザーのパスワードログインを無効にします(実行方法は、実行しているUNIXとディストリビューションによって異なります)。ポイントは、ユーザーはSSHキーでのみログインする必要があるということです。bkpuser
バックアップするすべてのディレクトリとファイルへの読み取りアクセス権があることを確認してください。
Aで作成されたキーの公開部分を~bkpuser/.ssh/authorized_keys
Bにコピーします。編集して、接続時にコマンドを自動的に実行します。そのコマンドは、シェルスクリプトへのポインターであってはなりません。代わりに、シェルスクリプトをキーに直接挿入します。また、キーがサーバーAからのみ使用でき、他のサーバーからは使用できないように制限を含めます。以下の例では、サーバーAにIPアドレスを与え10.1.2.3
ており、バックアップしたいファイルがすべて下にあると仮定しています/data
。
from="10.1.2.3",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="cd /data;/usr/bin/tar -cf - *; /usr/bin/logger -t BACKUP -p daemon.info \"INFO: Backup-files on $HOST fetched from ${SSH_CLIENT%% *} by $USER\";" ssh-dss AA.....
@reboot
エントリをサポートするcronタブのいずれかを使用している場合はbkpuser
、コマンドを使用してそのようなエントリをcrontab に追加しますssh -i ~bkpuser/.ssh/id_dsa serverB > backup.tar.gz
。それらが許可されない場合は、いつでも好きなときに設定してください-それが私のデータである場合、私はおそらく毎日それをするでしょう。
SSHを使用して毎日午前4時にサーバーBをサーバーAにバックアップする完全なソリューションを次に示します。
サーバーBからサーバーAへの自動SSH接続を作成します
ssh-keygen -t dsa -b 1024
ssh-copy-id -i ~/.ssh/id_dsa.pub "-p ssh_port root@server_a"
サーバーBでバックアップスクリプトを作成する
nano / root / backup
# !/bin/sh
# Variables loading
HOST="root@server_a"
PORT=22
DIR="/var/backups/server_b"
# Directories creating
ssh -p $PORT $HOST <<EOF
mkdir -p $DIR/home
logout
EOF
# Files backing up
rsync -aze "ssh -p $PORT" --delete /home/user $HOST:$DIR/home
chmod 744 / root / backup
サーバーBでバックアップを自動化する
crontab -e
0 4 * * * /root/backup > /dev/null
詳細については、Linuxでパスワードを入力せずにSSHに接続し、DebianまたはUbuntu Linuxでサーバーをバックアップするページを参照してください。
問題の核心はそれを自動的に行う方法です(パスワードを入力する必要はありません):
screen
またはtmux
セッションを開始するeval $(ssh-agent)
ssh-add
export RSYNC_RSH="ssh -i ~/.ssh/id_rsa ..."
while :; do rsync -av u@h:/p /local; sleep $[24*60*60]; done
ssh
。
RSYNC_SSH
SSHキーの標準の場所を検索に追加する必要はありません。