はじめに
Linux(Debian)からQNAPにSSH経由でrsyncを使ってバックアップを行うメモです。
未解決
共有ディレクトリ(/backup)に対してadministrator権限のユーザに読み書きのアクセス権を与えましたが、以下のエラーが出ました。
administrator権限のユーザのホームディレクトリにはバックアップできるので、何かが足りないと思われます。
rsync: mkdir "/backup" failed: Permission denied (13)
環境
- Debian 12 bookworm - rsync 3.2.7-1 - ssh-keygen - OpenSSH_9.2p1 Debian-2+deb12u2, OpenSSL 3.0.11 19 Sep 2023 - QNAP TS-873A / AZ - QTS 5.1.6.2722
ディレクトリ構成です。
/home/backup/ - backup.sh - id_ed25519.pub - id_ed25519 - log.txt
手順
1. QNAPでバックアップ用の専用アカウントを作成する。(管理者adminで行う場合は不要)
2. QNAPでSSHを有効にする。(1のユーザにアクセス許可する。)
3. LinuxでSSH鍵を生成する。
4. QNAPに作った1のユーザに公開鍵を登録する。
5. スクリプトをテストする。
QNAPでSSHを有効にする
QNAPでSSHを有効にします。
また、「アクセス許可の編集」でユーザにアクセス権を与えます。
LinuxでSSH鍵を生成する
作業ディレクトリに移動して、LinuxでSSH鍵をカレントディレクトリに生成します。
パスフレーズ無しとします。
公開鍵はid_ed25519.pub、秘密鍵はid_ed25519となります。
cd /home/backup ssh-keygen -t ed25519 -f ./id_ed25519
QNAPの対象ユーザに公開鍵を登録する
QNAPのバックアップ用の専用アカウントに公開鍵を登録します。
id_ed25519.pubの内容をコピペします。
スクリプトを作成する
バックアップ用スクリプト(backup.sh)を作成します。
#!/bin/bash # NASの設定 NAS_HOST="192.168.1.100" NAS_USER="admin" #NAS_USER="qnap_user" # /home/backupuser(ホームディレクトリ)の下に作成する場合は、/(スラッシュ)は不要 #NAS_DIR="/backup" NAS_DIR="backup" # バックアップするディレクトリ SOURCE_DIR="/data" # ログファイル LOG_FILE="/home/backup/log.txt" # SSH秘密鍵のパス SSH_KEY="/home/backup/id_ed25519" # SSHのポート番号 SSH_PORT="22" # rsyncコマンドのオプション # 同期(--deleteあり) #RSYNC_OPTS1="-avzho --delete --progress -e " #RSYNC_OPTS1="-avzho --delete -e " # 差分 #RSYNC_OPTS1="-avzho --progress -e " RSYNC_OPTS1="-avzho -e " # StrictHostKeyCheckingで問い合わせ無効 RSYNC_OPTS2="ssh -p ${SSH_PORT} -i ${SSH_KEY} -o StrictHostKeyChecking=no" # ログファイルに日時を記録 echo "================ $(date) =================" >> "${LOG_FILE}" # rsyncコマンドを実行 /usr/bin/rsync ${RSYNC_OPTS1} "${RSYNC_OPTS2}" ${SOURCE_DIR} ${NAS_USER}@${NAS_HOST}:${NAS_DIR} 2>&1 # 終了コードを確認 if [ $? -eq 0 ]; then echo "$(date '+%Y-%m-%d %H:%M:%S') Backup completed successfully." >> "${LOG_FILE}" else echo "$(date '+%Y-%m-%d %H:%M:%S') Backup failed." >> "${LOG_FILE}" fi
テストする
スクリプト(backup.sh)をテストします。
QNAPのFile Stationでコピーされているか確認します。
sudo bash backup.sh
または、
cd /home/backup sudo chmod 755 backup.sh sudo ./backup.sh
cronに登録する
rootのcronに登録します。
sudo crontab -e
1日に1回、バックアップします。
30 4 * * * /home/backup/backup.sh
Comments