定期的にホームネットワークのRaspberry Piに自動的にバックアップしたいと思います。自宅でバックアップするだけで十分です。
私が「自動バックアップを実行する方法」について読んだすべてのガイドでは、私のPyにパスワードのないSSHキーを入れるように指示されています。自分のコンピュータにアクセスできる人は誰でも自分のバックアップにアクセスできるので、これをしたくありません。これはバックアップの目的の1つを完全に排除します。
現在のソリューションは、パスワードで保護されたSSHキーとrsyncスクリプトです。動作に時間がかかりましたが、今すぐホームネットワークにログインするとすぐにパスワードの入力を求められ、バックアップされます。
restic
今、ある種のバージョンのバックアップが必要なので、使いたいです。他のデバイスもバックアップしたいです。 Resticガイドは、再びパスワードのないSSHキーを使用するように言いました。
今私は反対の考えを持っています。つまり、私の(オフライン)piはパスワードなしで自分のラップトップにSSHでアクセスできます(しかし使用は制限されていますresric
)。スクリプトを使用していくつかのsystemd.timerを実行して自分のラップトップにアクセスできることを確認し、その場合はバックアップを開始できます。
しかし、これは深刻に見え、これが一般的なシナリオであると確信しています。しかし、ガイドが見つかりません。
一般的な方向を教えてもらえますか?私がしたいことについてもっと知るために、いくつかの用語も役に立ちます!
答え1
組み合わせると、バックアップしたいマシンから接続できるREST APIを提供するサービスを使用して、バックアップサーバーにサービスを設定restic
できます。rclone
通常REST APIを使用するrclone
restic
restic
たくさんrestic
SFTP経由で使用するよりも高速です。
rclone serve restic --help
SSLの使用方法やhtpasswd
認証方法など、これについてはよく文書化されています。この文書を注意深く読んでください。。バックアップサーバーがパブリックサーバーであるか(そうではありません)、個人以外の設定のためにバックアップサーバーを実行している場合は、どのような方法でも個々のユーザーを認証してセキュリティを維持する必要があります。
ローカルネットワークの外部で使用できるようにするには、localhost
バックアップサーバーとして使用されるホストに少なくとも次の設定が必要です。
rclone serve restic --addr :8080 /var/backup/restic
/var/backup/restic
リポジトリを保存するパスは次のとおりですrestic
(上記のコマンドを実行するユーザーには、そのパスに対する書き込み権限が必要なため、専用のサービスユーザーを作成する必要があります)。--addr :8080
「利用可能なすべてのインターフェイスでポート8080にバインド」を意味します(デフォルトではrclone
バインディングのみlocalhost:8080
)。
その後、次のコマンドを使用してここに接続できます(これにより、restic
リポジトリが初期化され、自分のホームディレクトリの最初のスナップショットが作成されます)。
restic -r rest:http://backupsrv:8080/testrepo init
restic -r rest:http://backupsrv:8080/testrepo backup "$HOME"
restic
ここでは、名前付きリポジトリを作成して使用しようとすると、testrepo
バックアップサーバーにアクセスできると仮定しますbackupsrv
。ホスト名を正しい名前またはIP番号に変更する必要があります。
これにより、リポジトリのパスワードを求めるプロンプトがインタラクティブに表示されますが、通常どおり環境変数にパスワードを渡すことができます(代わりにリポジトリを渡すことができるRESTIC_PASSWORD
ように)。restic
RESTIC_REPOSITORY
-r ...
個人用Synology NASで次のDockerコンテナ(ファイルdocker-compose.yml
)を実行します。
version: '3'
services:
rclone:
image: rclone/rclone:latest
container_name: rclone
hostname: diskstation.local
ports:
- 18080:8080
restart: unless-stopped
command: ["serve","restic","/backup"]
environment:
- RCLONE_ADDR=0.0.0.0:8080
- RCLONE_STATS=1h
- RCLONE_VERBOSE=1
volumes:
- /volume1/Restic/backup:/backup
NASのポート18080でREST APIを提供し、restic
ここにバックアップを保存できます/volume1/Restic/backup
(コンテナのバインドマウントを介して)。rclone
隔離されたLAN(ファイアウォールおよびキャリアグレードNATの背後)にあるプライベートNASであるため、セットアップセキュリティは非常に低いです。
答え2
特定のタスクに制限されるパスワードのないキーを持つのがアイデアです。
たとえば、Restic(SFTP経由でバックアップを保存する)を使用するか、純粋なrsyncを使用すると、バックアップサーバーにバックアップディスクのBtrfs / ZFSスナップショットを保持させることができ、SSHキーを使用してroot権限なしでアカウントにアクセスできます。あります。スナップショットは削除できません。)誰かがキーを使用してResticリポジトリをリモートで削除すると、最後のスナップショットから復元するのに数秒かかります。その後、通常はラップトップの回復が続行されます。
SSHを介して通信する独自の「サーバー」を持つBorg Backupなどのプログラムでは、特定の強制リモートコマンドにのみキーを制限することで、SFTPやシェルではなくBorgサーバーを起動できます。 Borgにはforceコマンドで使用できる「追加専用」オプションがあるため、キーは新しいバックアップをアップロードするためにのみ使用でき、古いバックアップは削除できません。
ただし、おそらく誰かが1)ラップトップの暗号化されていないファイルにアクセスでき、2)ホームネットワークに接続している場合、より大きな問題が発生する可能性があります。
答え3
私が「自動バックアップを実行する方法」について読んだすべてのガイドでは、私のPyにパスワードのないSSHキーを入れるように指示されています。自分のコンピュータにアクセスできる人は誰でも自分のバックアップにアクセスできるので、これをしたくありません。これはバックアップの目的の1つを完全に排除します。
最初のステートメントは正確ですが、これについての私の理解を説明しようとしています。 (そして最小権限の原則もあります。)
- バックアップしたいコンピュータがあります。
- 誰かが誤ってコンピュータにアクセスしてバックアップを破壊できないようにバックアップを保護したいと思います。
ここで解決策は、PCではなくバックアップサーバー(Pi)でバックアップを駆動することです。 (Linux / Macクライアント)または(Windowsクライアント)rsync
と組み合わせて使用する場合は、PiがPCにアクセスできるようにスキームを設定してください。 (PiにパスワードなしでアクセスするためにPCは必要ありません。)ssh
rsyncd
一般的なアプローチは、Piでcron
PCを頻繁にバックアップしようとします(たとえば、4時間ごと)が、成功したら翌日まで再試行しないことです。このスクリプトはテストされていませんが、ソリューションのスケルトンを提供する必要があります。timeout 4h
フルバックアップにはこれが十分であることに注意することが重要です。
basedir=/data/backup_dir # Backups target directory
my_pc=192.168.130.33 # Your PC name or IP address
today=$(date +'%Y-%m-%d') # Today
stamp=$(cat "$basedir/.stamp" 2>/dev/null) # Date of last backup
if [ "$today" = "$stamp" ]
then
# Last backup was today
exit 0
fi
if ! ping -q -c1 "$my_pc"
then
# PC not responding to ping
exit 1
fi
# Backup your PC
if timeout 4h rsync -a "$my_pc":/…/ "$basedir/$today"
then
# Success
echo "$today" >"$basedir/.stamp"
exit 0
fi