Я роблю резервні копії на локальному диску, який я хочу щодня синхронізувати на віддалений сервер.
Цільовий сервер налаштований лише для доступу до ключа SSH (без пароля). Оскільки мій основний ключ SSH для цього сервера захищений парольною фразою, я створив другий ключ SSH (не захищений парольною фразою) + користувача, який потрібно використовувати для автономних резервних копій - таким чином я не повинен бути присутнім для введення парольної фрази під час запуску cron .
Я використовую cron і rsync, і всі команди працюють індивідуально, але не вдаються при їх поєднанні.
Найдаліший у мене під час усунення несправностей
env -i sh -c "rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/"
яка повертає помилку
Permission denied (publickey).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(226) [sender=3.1.0]
Будь-які поради, як вирішити цю проблему далі?
Ось що я спробував поки що, і мені не до думок:
- Cron напевно працює
ps aux | grep cron
Нічого незвичайного в / var / log / syslog
Sep 7 13:22:01 desktop CRON[6735]: (tom) CMD (sh /home/tom/Documents/Scripts/offsite-backup)
SSH в терміналі на віддалений сервер, як працює резервний користувач
ssh backups-user@XX.XX.XX.XX
- Запуск команди в терміналі працює відмінно
rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
Вручну вказівка шляху до ключа резервного копіювання користувача не впливає
rsync -lrstRO --delete --exclude 'lost+found' -e 'ssh -i /home/tom/.ssh/backups-only' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
Заміна непрацюючої команди простою тестовою командою працює
echo "Hello world" > ~/Desktop/test.txt
Кричати / лаятися за комп’ютером не мали ефекту (але мені тимчасово стало краще).
Редагувати 1:
Ось мій файл crontab та сценарій, який він викликає.
...
# m h dom mon dow command
MAILTO=""
* * * * * sh /home/tom/Documents/Scripts/offsite-backup
і
#!/bin/bash
rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
Редагувати 2:
Просто для уточнення, /var/log/auth.log
на цільовому сервері міститься рядок Sep 11 08:23:01 <hostname> CRON[24421]: pam_unix(cron:session): session closed for user root
Це заплутано, оскільки я більше не щоденно виконую крон локально, але новий запис все одно з’являється щохвилини в журналах сервера. Файли Crontab для всіх користувачів (включаючи root) на сервері порожні і нічого не роблять.
Крім того, користувальницьке "резервне копіювання" створено лише на сервері та з обмеженими правами, із виділеним SSH-ключем, скопійованим на мою робочу машину. Я припускаю, що це шлях, тому що все працює, коли команди виконуються вручну.
Опублікований вище файл crontab - це для мене користувач 'tom' на моєму робочому столі. Моя мета полягає у тому, щоб він викликав скрипт, який повинен увійти на сервер як "резервне копіювання". Я просто спробував запустити скрипт резервного копіювання (а не команду всередині нього), і він успішно підключився і працював. Я запустив це на своєму робочому столі як користувач 'tom', той самий користувач, який створив роботу cron, яка не працюватиме. Ось вихід із журналу сервера, відповідний цьому успішному входу
Sep 11 08:35:31 <hostname> sshd[25071]: error: Could not load host key: /etc/ssh/ssh_host_ed25519_key
Sep 11 08:35:32 <hostname> sshd[25071]: Accepted publickey for backups-only from <desktop IP> port 54242 ssh2: RSA e2:e6:07:27:c1:continues...
Sep 11 08:35:32 <hostname> sshd[25071]: pam_unix(sshd:session): session opened for user backups-only by (uid=0)
Sep 11 08:35:32 <hostname> systemd-logind[638]: New session 12 of user backups-only.
Sep 11 08:36:00 <hostname> sshd[25133]: Received disconnect from <desktop IP>: 11: disconnected by user
Sep 11 08:36:00 <hostname> sshd[25071]: pam_unix(sshd:session): session closed for user backups-only
Sep 7 14:45:01 <hostname> CRON[18716]: pam_unix(cron:session): session closed for user root
Sep 7 16:06:02 <hostname> sshd[6747]...
. Ви на 100% впевнені, що цей логін із сервера і що це правильний рядок? Crontab, який ви опублікували, - це лише копія резервного копіювання ? Також спробуйте додати файл посвідчення вручну:rsync .... -e 'ssh -i /home/user/.ssh/identity' ...
auth.log
ви розмістили в редакції 2, призначений для запуску хронів на сервері, і не повинен мати нічого спільного з вашими спробами входу. Чи можете ви спробувати tail -f /var/log/auth.log
на сервері, коли ви намагаєтеся запустити скрипт через cron? Крім того, я не впевнений, чи спрацювало б це, але чи можете ви спробувати свою першу env
команду, rsync .... -e 'ssh -vvv -i /home/user/.ssh/identity ...
щоб побачити, чи виправляє вона більше помилок?