Realizo copias de seguridad frecuentes en una unidad local que quiero sincronizar diariamente con un servidor remoto.
El servidor de destino está configurado para acceso de clave SSH (sin contraseña) solamente. Como mi clave SSH principal para ese servidor está protegida con frase de contraseña, he creado una segunda clave SSH (no protegida con frase de contraseña) + usuario para usar para copias de seguridad desatendidas , de esta manera no tengo que estar presente para ingresar mi frase de contraseña cuando se ejecuta cron .
Estoy usando cron y rsync, y todos los comandos funcionan individualmente, pero fallan cuando se combinan.
Lo más lejos que tengo mientras se ejecuta la solución de problemas
env -i sh -c "rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/"
que devuelve el error
Permission denied (publickey).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(226) [sender=3.1.0]
¿Algún consejo sobre cómo solucionar esto más?
Esto es lo que he intentado hasta ahora y no tengo ideas:
- Cron definitivamente está corriendo
ps aux | grep cron
Nada inusual en / var / log / syslog
Sep 7 13:22:01 desktop CRON[6735]: (tom) CMD (sh /home/tom/Documents/Scripts/offsite-backup)
SSH en la Terminal al servidor remoto mientras el usuario de respaldo trabaja
ssh backups-user@XX.XX.XX.XX
- Ejecutar el comando en la Terminal funciona perfectamente
rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
La especificación manual de la ruta a la clave del usuario de copias de seguridad no tiene ningún efecto
rsync -lrstRO --delete --exclude 'lost+found' -e 'ssh -i /home/tom/.ssh/backups-only' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
Reemplazar el comando que no funciona con un comando de prueba simple funciona
echo "Hello world" > ~/Desktop/test.txt
Gritar / insultar a la computadora no tuvo ningún efecto (pero me hizo sentir mejor temporalmente).
Editar 1:
Aquí está mi archivo crontab y el script que llama.
...
# m h dom mon dow command
MAILTO=""
* * * * * sh /home/tom/Documents/Scripts/offsite-backup
y
#!/bin/bash
rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
Edición 2:
Solo para aclarar, /var/log/auth.log
en el servidor de destino contiene la línea Sep 11 08:23:01 <hostname> CRON[24421]: pam_unix(cron:session): session closed for user root
Esto es confuso porque ya no estoy ejecutando cron cada minuto localmente, pero todavía aparece una nueva entrada cada minuto en los registros del servidor. Los archivos de Crontab para todos los usuarios (incluido el root) en el servidor están vacíos y no hacen nada.
Además, el usuario 'solo copias de seguridad' se creó solo en el servidor y con derechos limitados, con una clave SSH dedicada copiada a mi máquina de escritorio. Supongo que este es el camino a seguir porque todo funciona cuando se ejecutan los comandos manualmente.
El archivo crontab publicado anteriormente es para mí, el usuario 'tom' en mi máquina de escritorio. Mi intención es que llame al script que debe iniciar sesión en el servidor como usuario 'solo copias de seguridad'. Acabo de intentar ejecutar el script de copia de seguridad (en lugar del comando dentro de él) y se conectó y funcionó correctamente. Lo ejecuté en mi escritorio como usuario 'tom', el mismo usuario que creó el trabajo cron que no funcionará. Aquí está la salida del registro del servidor correspondiente a ese inicio de sesión exitoso
Sep 11 08:35:31 <hostname> sshd[25071]: error: Could not load host key: /etc/ssh/ssh_host_ed25519_key
Sep 11 08:35:32 <hostname> sshd[25071]: Accepted publickey for backups-only from <desktop IP> port 54242 ssh2: RSA e2:e6:07:27:c1:continues...
Sep 11 08:35:32 <hostname> sshd[25071]: pam_unix(sshd:session): session opened for user backups-only by (uid=0)
Sep 11 08:35:32 <hostname> systemd-logind[638]: New session 12 of user backups-only.
Sep 11 08:36:00 <hostname> sshd[25133]: Received disconnect from <desktop IP>: 11: disconnected by user
Sep 11 08:36:00 <hostname> sshd[25071]: pam_unix(sshd:session): session closed for user backups-only
Sep 7 14:45:01 <hostname> CRON[18716]: pam_unix(cron:session): session closed for user root
Sep 7 16:06:02 <hostname> sshd[6747]...
. ¿Estás 100% seguro de que este logline es del servidor y que es la línea correcta? El crontab que publicaste es el crontab de solo copias de seguridad . Además, intente agregar el archivo de identidad manualmente:rsync .... -e 'ssh -i /home/user/.ssh/identity' ...
auth.log
que publicó en Editar 2 es para cron que se ejecuta en el servidor, y no debe tener nada que ver con sus intentos de inicio de sesión. ¿Puedes probar tail -f /var/log/auth.log
en el servidor mientras intentas ejecutar el script a través de cron? Además, no estoy seguro de si esto funcionaría, pero ¿puedes probar tu primer env
comando rsync .... -e 'ssh -vvv -i /home/user/.ssh/identity ...
para ver si arroja más errores?