El servicio systemd no puede autenticar scp entre dos servidores

El servicio systemd no puede autenticar scp entre dos servidores

He escrito un servicio que activa un script de shell para realizar una copia de seguridad de una base de datos postgres en un servidor CentOS7. Vuelca el archivo de copia de seguridad en la carpeta /tmp/ y luego se supone que debe copiar el archivo a otro servidor, pero algo anda mal, sospecho que es mi bash. El servicio realiza bien la copia de seguridad, pero falla a la hora de copiarla al otro servidor.

Puedo transferir manualmente el archivo de copia de seguridad desde la carpeta /tmp/ en el servidor1 a la carpeta /tmp/ en el servidor2 usando autenticación de clave pública, por lo que no hay contraseña entre los dos, pero no estoy seguro de por qué systemd falla con el siguiente error :

Aug 17 14:29:34 pcc-home-page-one.novalocal systemd[1]: Started backup service for production.
Aug 17 14:29:35 pcc-home-page-one.novalocal backup.sh[1467]: Permission denied, please try again.
Aug 17 14:29:35 pcc-home-page-one.novalocal backup.sh[1467]: Permission denied, please try again.
Aug 17 14:29:35 pcc-home-page-one.novalocal backup.sh[1467]: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
Aug 17 14:29:35 pcc-home-page-one.novalocal backup.sh[1467]: lost connection
Aug 17 14:29:35 pcc-home-page-one.novalocal systemd[1]: backup.service: main process exited, code=exited, status=1/FAILURE
Aug 17 14:29:35 pcc-home-page-one.novalocal systemd[1]: Unit backup.service entered failed state.
Aug 17 14:29:35 pcc-home-page-one.novalocal systemd[1]: backup.service failed.

Aquí está mi script bash:

#!/usr/bin/env bash

today=$(date +"%d-%m-%Y")

pg_dump -U db_backup -h localhost pcc_db >/tmp/backup-${today}.bak

scp /tmp/backup-${today}.bak [email protected]:/tmp/

y aquí está el archivo de servicio:

[Unit]
Description=backup service for production

[Service]
Type=simple
ExecStart=/home/ifunk/backup.sh

¿Qué puedo hacer para que funcione la línea scp en el script?

EDITAR: Al mirar los registros de journalctl, aparece el siguiente error:

Unregistered Authentication Agent for unix-process:3757:6223410 (system bus name :1.42, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_GB.UTF-8) (disconnected from bus)

Configuré SELinux en Permisivo y ejecuté daemon-reload, pero el servicio aún falla con el mismo error.

Respuesta1

Esto ya se ha solucionado gracias a un usuario de reddit, u/Skaarj. En sus palabras:

La suposición predeterminada de systemd es que está ejecutando servicios como usuarios del sistema (usuarios no humanos que no tienen un directorio de inicio). Por eso $HOME no está configurado.

Puede

start your systemd unit as a secific user

or give scp the path to the ssh key using the -i flag

Todo lo que se necesitaba era editar el script bash y agregar el archivo clave al comando scp; el script bash ahora se ve así:

#!/usr/bin/env bash

today=$(date +"%d-%m-%Y")

pg_dump -U db_backup -h localhost pcc_db >/tmp/backup-${today}.bak

scp -i /home/ifunk/.ssh/id_rsa /tmp/backup-${today}.bak

Ahora hace lo que se supone que debe hacer y sale limpiamente.

información relacionada