Para hacer esto diariamente en la mayoría de las distribuciones de Linux, debería poder simplemente poner el rsync
comando (según la respuesta de @ guido ) en un script y colocar el script en el /etc/cron.daily
directorio. Mientras anacron
esté instalado (puede que no sea por defecto), los cron.daily
trabajos perdidos se recuperarán la próxima vez que la máquina arranque (además de ejecutarse a medianoche si la máquina se cambia).
Para el guión que simplemente harías:
#!/bin/sh
rsync -a user@serverB:/source/folder/ /destination_folder
Podría agregar la -z
opción (compresión) si la copia de seguridad se realiza a través de una conexión lenta (ish) o si desea ahorrar ancho de banda, pero en mi experiencia realmente afectará el rendimiento con las máquinas / redes modernas.
Si desea mantener un registro de cada copia de seguridad, puede hacer algo como:
#!/bin/sh
rsync -av user@serverB:/source/folder/ /destination_folder \
>/var/log/backup_log 2>&1
Tenga en cuenta que para que esto funcione como un trabajo cron, debe tener ssh sin contraseña configurado para root en el servidor A para iniciar sesión en el servidor B. Debe ser la cuenta raíz (es decir, las claves /root/.ssh
) ya que los cron.daily
trabajos se ejecutan como raíz.
anacron
no recogerácron
trabajos por usuario . Aunque siempre puede usarsu
/sudo
desde el script para ejecutar rsync como un usuario en particular. Pero tenga en cuenta que las claves se mantendrán más seguras debajo/root
.user
podría ser un usuario normal en machineB dependiendo de lo que esté respaldando.ls -l
algunos de los archivos a su pregunta, la gente puede darle más consejos.Sugeriría usar rdiff-backup . Lo uso ahora para hacer copias de seguridad incrementales automáticas todas las noches de mis propios datos (dos estaciones de trabajo, dos servidores y una cuenta en el servidor de otra persona).
Utilicé rsync anteriormente para esto, pero cambié a rdiff-backup ya que es más conveniente y puede hacer copias de seguridad incrementales de archivos grandes, como imágenes de disco de máquinas virtuales. rdiff-backup es muy parecido a mis scripts de copia de seguridad rsync anteriores, pero está bien hecho .
Puse un archivo de secuencia de comandos en /etc/cron.daily en la máquina donde se almacena la copia de seguridad, que inicia rdiff-backup una vez al día temprano por la mañana y recupera los datos de la máquina remota.
fuente
Además de todas las respuestas anteriores, aquí hay una que se basa en claves SSH con restricciones sobre lo que se puede hacer al iniciar sesión con esa clave.
En el servidor A
En este caso, es menos importante si crea un usuario separado o usa uno de sus nombres de usuario existentes, aunque si fuera yo, crearía un usuario separado. Usaré el nombre
bkpuser
de usuario para ambos servidores en mis ejemplos a continuación.Cuando inicie sesión
bkpuser
, cree una clave SSH sin contraseña.En el servidor B
Habilitar
PubkeyAuthentication
ensshd_config
.Crea el usuario
bkpuser
. Establezca una contraseña muy complicada o desactive el inicio de sesión de contraseña para ese usuario (exactamente cómo lo haga dependerá de qué unix y distribución esté ejecutando). El punto es que el usuario solo debe iniciar sesión con una clave SSH. Asegúrese de quebkpuser
tenga acceso de lectura a todos los directorios y archivos de los que desea hacer una copia de seguridad.Copie la parte pública de la clave creada en A
~bkpuser/.ssh/authorized_keys
en B. Edite para ejecutar automáticamente un comando en la conexión. Ese comando no debe ser un puntero a un script de shell; en su lugar, inserte el script de shell en la clave directamente. También incluya una limitación para que la clave solo se pueda usar desde el servidor A y ningún otro servidor. En el siguiente ejemplo, le doy al servidor A la dirección IP10.1.2.3
y supongo que todos los archivos de los que quiero hacer una copia de seguridad están debajo/data
.En el servidor A
Si está utilizando una de las pestañas cron que admite
@reboot
entradas, agregue dicha entrada abkpuser
s crontab con el comandossh -i ~bkpuser/.ssh/id_dsa serverB > backup.tar.gz
. Si no lo permite, configúrelo en cualquier momento que desee; si fuera mi información, probablemente lo haría a diario.fuente
Aquí hay una solución completa para hacer una copia de seguridad del servidor B en el servidor A todos los días a las 4 a.m. con SSH.
Cree una conexión SSH automática del servidor B al servidor A
Crear una secuencia de comandos de respaldo en el servidor B
nano / root / backup
chmod 744 / root / backup
Automatizar la copia de seguridad en el servidor B
crontab -e
Para obtener más detalles, consulte las páginas Conéctese a SSH sin ingresar una contraseña en Linux y haga una copia de seguridad de un servidor en Debian o Ubuntu Linux .
fuente
Puede usar rsync para esto (de alguna manera inversa):
dónde:
fuente
-a
implica-r
.El quid de la cuestión es cómo hacerlo automáticamente (no es necesario ingresar contraseñas):
screen
otmux
sesióneval $(ssh-agent)
ssh-add
export RSYNC_RSH="ssh -i ~/.ssh/id_rsa ..."
while :; do rsync -av u@h:/p /local; sleep $[24*60*60]; done
fuente
ssh
.RSYNC_SSH
para buscar ubicaciones estándar de claves SSH....
puntos donde puede agregar argumentos útiles. Tampoco leíste mi último comentario donde menciono la "pregunta realmente importante", por lo que nunca lo haría con claves sin contraseña. También deberá habilitarloPubkeyAuthentication
y nadie lo dijo.