O serviço systemd falha ao autenticar o scp entre dois servidores

O serviço systemd falha ao autenticar o scp entre dois servidores

Eu escrevi um serviço que aciona um script de shell para fazer backup de um banco de dados postgres, em um servidor CentOS7. Ele despeja o arquivo de backup na pasta /tmp/ e então deve copiar o arquivo para outro servidor, mas algo está errado, suspeito que seja meu bash. O serviço faz o backup corretamente, mas falha na hora de copiá-lo para o outro servidor.

Consigo copiar manualmente o arquivo de backup da pasta /tmp/ no servidor1 para a pasta /tmp/ no servidor2 usando autenticação de chave pública, sem senha entre os dois, mas não sei por que o systemd apresenta o seguinte erro :

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.

Aqui está meu 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/

e aqui está o arquivo de serviço:

[Unit]
Description=backup service for production

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

O que posso fazer para que a linha scp no script funcione, por favor?

EDIT: Olhando para os logs do journalctl, recebo o seguinte erro:

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)

Configurei o SELinux como Permissivo e executei o daemon-reload, mas o serviço ainda falha com o mesmo erro.

Responder1

Isso agora foi resolvido graças a um usuário do reddit u/Skaarj. Em suas palavras:

A suposição padrão do systemd é que você está executando serviços como usuários do sistema (usuários não humanos que não possuem um diretório inicial). É por isso que $HOME não está definido.

Você pode

start your systemd unit as a secific user

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

Tudo o que foi necessário foi editar o script bash e adicionar o arquivo-chave ao comando scp, o script bash agora se parece com isto:

#!/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

Agora ele faz o que deveria e sai de forma limpa.

informação relacionada