Служба systemd не может аутентифицировать scp между двумя серверами

Я написал службу, которая запускает сценарий оболочки для резервного копирования базы данных postgres на сервере CentOS7. Он выгружает файл резервной копии в папку / tmp /, а затем должен скопировать файл на другой сервер, но что-то не так, я подозреваю, что это мой bash. Служба отлично выполняет резервное копирование, но не может скопировать его на другой сервер.

Я могу вручную скопировать файл резервной копии из папки / tmp / на server1 в папку / tmp / на server2 с помощью открытого ключа аутентификация, поэтому между ними нет пароля, но я не уверен, почему systemd выдает следующую ошибку:

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.

Вот мой сценарий 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 ifunk@10.88.59.200:/tmp/

и вот служебный файл:

[Unit]
Description=backup service for production

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

Что я могу сделать чтобы заставить строку scp в скрипте работать, пожалуйста?

РЕДАКТИРОВАТЬ: Просматривая журналы journalctl, я получаю следующую ошибку:

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)

Я установил SELinux на Permissive и запустил daemon-reload, но служба все еще выдает ту же ошибку.

0
задан 18 August 2020 в 11:16
1 ответ

Теперь проблема решена благодаря пользователю Reddit u/Skaarj. По его словам:

предположение systemd по умолчанию заключается в том, что вы запускаете службы как системные пользователи (не-пользователи, не являющиеся людьми, у которых нет домашнего каталога). Вот почему $HOME не задан.

Вы можете

start your systemd unit as a secific user

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

Все, что требовалось, это отредактировать bash-скрипт и добавить ключевой файл в команду scp, теперь bash-скрипт выглядит так:

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

Теперь он делает то, что должен, и завершается чисто.

0
ответ дан 18 August 2020 в 13:24

Теги

Похожие вопросы