私は本当に気に入らないやや薄暗い解決策を作り、それを改善したいと思います。問題はこれである:
データベースを維持するヘッドレスサーバーがあり、/root/.local/somedir
そのファイルをリモートサーバーに保存したいと思います。私が持っている最大の問題は、それがルートアカウントであるということです。
私の現在のソリューション:
ルートディレクトリから:
- 各期間*は、ファイルをハッシュしてログに保存するcronジョブを実行します。
- 同じcronジョブは、
rsync
ファイル(ハッシュが変更された場合)を同じシステムのユーザーアカウントに送信します。
ユーザーアカウントから:
- 時々cronジョブを実行し、
rsync
リモートコンピュータにファイルを送信します。
*テスト時の時間は2分間隔に設定されており、その後毎日、6時間、またはその他の時間に変更されます。
ルート予約タスク:
#!/bin/sh
dt=$(date '+%Y-%m-%d %H:%M');
d2=$(date '+%Y-%m-%d-%H-%M');
fn='/root/hash.log'
bk='/root/.local/share/file-to-backup'
b2="file-to-backup.$d2.bk"
hash_last=$(tail -1 hash.log | awk '{split($0,a," "); print a[3]}')
hash_now=$(md5sum $bk | awk '{split($0,a," "); print a[1]}')
if [ "$hash_now" != "$hash_last" ]; then
echo "$dt $hash_now" >> $fn
rsync -og --chown=user:user $bk /home/user/$b2
elif [ "$1" = "force" ]; then
rsync -og --chown=user:user $bk /home/user/$b2
fi
ユーザークローン:
(ユーザーにSSHキー設定がある)
#!/bin/bash
rsync --remove-source-files file-to* server:.
私が見る問題は次のとおりです。
これはうまくいきますが、私には恥ずかしいようです。
理想的には、ファイルが実際に存在するrootユーザーアカウントでリモートバックアップを実行したいと思います。
問題は、rootアカウントにファイルがあり、リモートサーバーとパスワードのない同期をしたいということです。考えるルートアカウントの秘密鍵/公開鍵を生成しないでください。
このバックアップをどのように処理するのが最善かわかりません。
ベストアンサー1
ルートアカウントの秘密鍵/公開鍵を生成する必要はないと思います。
自分に聞いてください。なぜこれがルートアカウントにあるのですか?既存のサーバー上のほぼすべてのデーモンは root ではなくユーザーとして実行されます。創作に興味があれば顧客rootユーザーに証明書を提供します(これは、証明書をデフォルトの場所に保存してもボックスにログインできるようにすることとはまったく異なります)。 rootでジョブを実行することについてさらに心配する必要があります。
その質問はスキップし(もちろん考えてみることをお勧めします)、すぐに次の質問に進みます。本当にその理由はありません。いいえクライアントSSH証明書を生成し、ファイルをバックアップサーバーに直接再同期しますroot
。任意の名前でrsaキーを保存できます。 rsync の実行時に指定できます。追加のアクセス権を付与しません。入力するサーバー(もちろんヘッドレスなので同意します)の代わりにキーを保存することを許可します。存在するサーバー (/root/.ssh が最も安全な場所) は、このファイルを次のようにコピーします。ルートではないサーバーはバックアップマシンにあります。
これはうまくいきますが、私には恥ずかしいようです。
はい、完全に同意します。rsync
ファイルを同期する必要があるかどうかがわかるので、デフォルトでここで実行するすべての操作には、そのファイルをルートではなく場所にコピーするオプションがあります。/root
最初から言及する説得力のある理由がないことに注意してください。通常、ディレクトリは他の人が読むことができないため、そのサブディレクトリにアクセスできません。しなければならないこれは root 以外のユーザーにも許可されます。意図した目的と一致する権限を持つ別のディレクトリに保存することはどうですか?最も簡単な場合は、グループがファイルを読み取ることを許可し、バックアップユーザーをそのグループに配置します。または、ルートにバックアップを実行させてください。または、最初からrootとして実行しないでください。このファイルとディレクトリパスをrootとして所有することにし、rootだけを読み取るだけで、rootがそれをバックアップしたくないので、これは非常に扱いにくくなります。