Estoy intentando configurar un script de shell en Debian GNU/Linux para hacer una copia de seguridad de un directorio y subdirectorios en un NAS remoto que ejecuta Linux a través de SSH. Esta conexión debe estar cifrada.
He probado un par de enfoques diferentes que involucran rsync rsh
y demás, pero sin suerte. Sé cómo configurar crontab
, pero necesito un script que se ejecute desatendido (es decir, que no solicite una contraseña).
¿Alguien podría ayudarme?
EDITAR: ahora puedo iniciar sesión correctamente sin contraseña.
El problema ahora es hacer que rsync copie los archivos /backups/
en[remote system]:/backups/
Solo copia una carpeta de /backups/
a [remote system]:/backups/
.
EDITAR: Parece que el sistema local tiene un /backups y otro /backup... Lo he probado con /backups cuando debería haber usado /backup...
Comando final:rsync -avzr -e ssh /backup/ admin@[IP]:/backups/
Respuesta1
rsync desde 2.6.x utiliza de forma predeterminada ssh para transferencias. Por lo tanto, ya está solucionado siempre que su rsync NAS remoto sea compatible.
En cuanto a las transferencias desatendidas sin contraseña, configure la autenticación basada en clave ssh para el usuario con el que está ejecutando el cron y eso debe hacerse. Así es como lo configuras:http://www.cyberciti.biz/tips/ssh-public-key-based-authentication-how-to.html
Respuesta2
También puedes pasar este indicador a rsync para usar un archivo para la contraseña:
--archivo-contraseña
Puede cambiar fácilmente el archivo a 400 para que nadie más que su usuario pueda leer ese archivo (y el root, por supuesto)
Respuesta3
Sincronización de clave Ssh. Dijiste que esto funcionaba, pero pensé en publicar los pasos de todos modos.
ssh en su NAS
Para hacer la llave
ssh-keygen -t rsa on local machine
Luego sincronice con la computadora desde la que realizará la copia de seguridad
cat ~/.ssh/id_rsa.pub | ssh user@hostname ‘cat>>.ssh/authorized_keys’
Script de copia de seguridad de Rync: esto creará una carpeta de copia de seguridad para hoy, luego sincronizará los archivos de ayer con los de hoy, esto reducirá la carga en la red y luego sincronizará los archivos de hoy para realizar la copia de seguridad.
#!/bin/sh
mkdir -p /storage/backups/`date +\%Y-\%m-\%d`-`date +\%A`/$host/$username
rsync -avz /storage/backups/`date --date=yesterday +\%Y-\%m-\%d`-`date--date=yesterday +\%A`/$host/$username/ /storage/backups/`date +\%Y-\%m-\%d`-`date +\%A`/$host/$username/
rsync -avz -e ssh /home/username/ /storage/backups/`date +\%Y-\%m-\%d`-`date +\%A`/$host/$username/
También necesitará un script que limpie las copias de seguridad: esto mantendrá una copia de seguridad de una semana. Puedo confirmar que esto funciona en el nas listo de Netgear.
#!/bin/sh
# Definitions
sevendaysago=$(date --date='6 days ago' +%Y-%m-%d-%A)
# Delete backups from 7 days ago
rm -rf /storage/backups/$sevendaysago
necesitarás ejecutar esto para que los scripts se puedan ejecutar
chmod u+x script.sh
en cron solo necesitarás agregar vía crontab -e
@daily sh backupscript
1 17 * * * sh dailycleanup