SSH自動リモートバックアップ

SSH自動リモートバックアップ

私は2台のマシンを持ってAいますBASSHを介してマシンにアクセスできますBA利用可能なスペースがたくさんあります。Bデータが危険な状況にあります。 Bすべてのデータを自動的にバックアップする方法Aあまり頻繁に行う必要はありませんが、ハンズフリーでなければなりません。すべてのA開始は十分に頻繁です。同期が可能だと聞きました。

答え1

ほとんどの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ジョブとして機能するには、次のものが必要です。パスワードのないSSHに設定サーバーAからサーバーBにログインします。ジョブはrootとして実行されるため、rootアカウント(つまりタイプ/root/.ssh)である必要があります。cron.daily

答え2

使用することをお勧めしますrdiff バックアップ。今、私はそれを使って毎晩私のデータ(ワークステーション2つ、サーバー2つ、他のサーバーのアカウント)を自動的に増分バックアップします。

以前はrsyncを使用したことがありますが、より便利で、仮想マシンのディスクイメージなどの大容量ファイルの増分バックアップを実行できるため、rdiff-backupに切り替えました。 rdiff-backupは以前のrsyncバックアップスクリプトと非常に似ていますが、完了しました。正しい

スクリプトファイルを入れました。/etc/cron.dailyバックアップが保存されたマシンでは、毎朝rdiff-backupが開始され、リモートマシンからデータがインポートされます。

答え3

以前のすべての回答に加えて、以下はSSHキーに依存する答えです。これは、そのキーでログインするときに実行できる操作を制限します。

サーバーAから

この時点では、別々のユーザーを作成したり、既存のユーザー名の1つを使用したりすることは重要ではありません。しかし、私は別のユーザーを作成します。bkpuser次の例では、両方のサーバーのユーザー名を使用します。

ログイン後、bkpuserパスワードなしでSSHキーを生成してください。

サーバーBで

PubkeyAuthenticationで有効になっていますsshd_config

ユーザーを作成しますbkpuser。非常に複雑なパスワードを設定するか、このユーザーのパスワードログインを無効にします(これを行う方法は、実行しているUnixとディストリビューションによって異なります)。重要なのは、ユーザーがSSHキーを介してのみログインできることです。bkpuserバックアップしたいすべてのディレクトリとファイルに対する読み取り権限があることを確認してください。

Aで生成された鍵の公開部分を~bkpuser/.ssh/authorized_keysBにコピーします。接続時に自動的にコマンドを実行するように編集されました。このコマンドはシェルスクリプトへのポインタにしてはいけません。代わりに、シェルスクリプトがキーに直接挿入されます。また、キーはサーバー 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.....

サーバーAから

エントリをサポートする cron タブのいずれかを使用している場合は、コマンドを使用して@rebootそのエントリを s crontab に追加します。許可されていない場合はいつでも設定できます。私のデータなら、おそらく毎日これを行います。bkpuserssh -i ~bkpuser/.ssh/id_dsa serverB > backup.tar.gz

答え4

rsyncを使用してこれを達成できます(リバース)。

serverA# rsync -avz user@serverB:/path-to-backup.tar.gz /var/backup

どこ:

-avz  archive, compress and be verbose

関連情報