systemd 服務無法驗證兩台伺服器之間的 scp

systemd 服務無法驗證兩台伺服器之間的 scp

我編寫了一個服務,可以觸發 shell 腳本來備份 CentOS7 伺服器上的 postgres 資料庫。它將備份檔案轉儲到 /tmp/ 資料夾中,然後應該將檔案複製到另一台伺服器,但出了問題,我懷疑這是我的 bash。該服務可以很好地進行備份,但在將其複製到其他伺服器時失敗。

我可以使用公鑰身份驗證將備份檔案從 server1 中的 /tmp/ 資料夾手動 scp 到 server2 中的 /tmp/ 資料夾,因此兩者之間無需密碼,但我不確定為什麼 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 [email protected]:/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,但服務仍然失敗並出現相同的錯誤。

答案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

現在它執行了它應該做的事情並乾淨地退出。

相關內容