Я часто делаю резервные копии на локальный диск, который хочу ежедневно синхронизировать с удаленным сервером.
Целевой сервер настроен только для доступа по ключу 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]
Любые советы о том, как решить эту проблему дальше?
Вот что я пробовал до сих пор, и у меня нет идей:
- Крон определенно бежит
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
Это сбивает с толку, потому что я больше не запускаю cron каждую минуту локально, но новая запись по-прежнему появляется каждую минуту в журналах сервера. Файлы 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», предназначена для работы cron на сервере и не должна иметь ничего общего с вашими попытками входа в систему. Можете ли вы попробовать tail -f /var/log/auth.log
на сервере, пока вы пытаетесь запустить скрипт через cron? Кроме того, я не уверен, что это сработает, но можете ли вы попробовать свою первую env
команду с помощью, rsync .... -e 'ssh -vvv -i /home/user/.ssh/identity ...
чтобы увидеть, если она выдаст больше ошибок?