Der Systemd-Dienst kann SCP zwischen zwei Servern nicht authentifizieren

Der Systemd-Dienst kann SCP zwischen zwei Servern nicht authentifizieren

Ich habe einen Dienst geschrieben, der ein Shell-Skript auslöst, um eine Postgres-Datenbank auf einem CentOS7-Server zu sichern. Er legt die Sicherungsdatei in den Ordner /tmp/ ab und soll sie dann auf einen anderen Server kopieren, aber irgendetwas stimmt nicht, ich vermute, es liegt an meiner Bash. Der Dienst führt die Sicherung einwandfrei durch, schlägt aber fehl, wenn er sie auf den anderen Server kopieren will.

Ich kann die Sicherungsdatei mithilfe einer Authentifizierung mit öffentlichem Schlüssel manuell per SCP aus dem Ordner /tmp/ auf Server1 in den Ordner /tmp/ auf Server2 übertragen, also ohne Kennwort zwischen den beiden. Ich bin mir jedoch nicht sicher, warum systemd den folgenden Fehler ausgibt:

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.

Hier ist mein Bash-Skript:

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

und hier ist die Servicedatei:

[Unit]
Description=backup service for production

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

Was kann ich tun, damit die SCP-Zeile im Skript funktioniert?

BEARBEITEN: Beim Betrachten der Journalctl-Protokolle erhalte ich die folgende Fehlermeldung:

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)

Ich habe SELinux auf Permissive eingestellt und daemon-reload ausgeführt, aber der Dienst schlägt immer noch mit demselben Fehler fehl.

Antwort1

Dies wurde nun dank eines Reddit-Benutzers u/Skaarj gelöst. In seinen Worten:

systemd geht standardmäßig davon aus, dass Sie Dienste als Systembenutzer ausführen (keine menschlichen Benutzer, die kein Home-Verzeichnis haben). Aus diesem Grund ist $HOME nicht festgelegt.

Du kannst

start your systemd unit as a secific user

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

Alles, was erforderlich war, war, das Bash-Skript zu bearbeiten und die Schlüsseldatei zum SCP-Befehl hinzuzufügen. Das Bash-Skript sieht nun folgendermaßen aus:

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

Es tut jetzt, was es soll, und wird sauber beendet.

verwandte Informationen