Files
SnarfCode/scripts/sync_backups_to_nas.py
2026-11-03 14:32:06 -05:00

38 lines
1.4 KiB
Python

import paramiko
import sys
sys.stdout.reconfigure(encoding='utf-8')
nodes = [
("aerodrome", "140.44.4.11", ["authentik_clean.sql.gz", "awx_clean.sql.gz"]),
("spaceport", "140.44.4.41", ["gitea_clean.sql.gz", "zabbix_clean.sql.gz"])
]
for name, ip, files in nodes:
print(f"[{name.upper()}] Mounting NAS and copying backups...")
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip, username='root', key_filename=r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet', timeout=10)
setup_cmd = """
mkdir -p /mnt/nas_backup
mount -t nfs -o vers=4 14.10.10.71:/volume1/docker /mnt/nas_backup || mount -t nfs 14.10.10.71:/volume1/docker /mnt/nas_backup
mkdir -p /mnt/nas_backup/backups/databases
"""
stdin, stdout, stderr = ssh.exec_command(setup_cmd)
stdout.channel.recv_exit_status()
for f in files:
cp_cmd = f"cp /var/backups/{f} /mnt/nas_backup/backups/databases/ && ls -lh /mnt/nas_backup/backups/databases/{f}"
stdin, stdout, stderr = ssh.exec_command(cp_cmd)
stdout.channel.recv_exit_status()
print(f" Saved to NAS: {stdout.read().decode().strip()}")
umount_cmd = "umount -f /mnt/nas_backup || true"
stdin, stdout, stderr = ssh.exec_command(umount_cmd)
stdout.channel.recv_exit_status()
ssh.close()
print("All database backups verified mirrored to Synology NAS (14.10.10.71).")