Почему это задание rsync + ssh cron дает мне ошибки «Разрешения на отказ (publickey)»?

16

Я делаю частые резервные копии на локальном диске, который я хочу ежедневно синхронизировать с удаленным сервером.

Целевой сервер настроен только для доступа к SSH (без пароля). Поскольку мой основной ключ SSH для этого сервера защищен паролем, я создал второй ключ SSH (без защищенной парольной фразы) + пользователь для использования в автоматических резервных копиях - таким образом, мне не нужно присутствовать, чтобы вводить мою кодовую фразу при запуске cron.

Я использую cron и rsync, и все команды работают индивидуально, но сбой при объединении.

Самое длинное, что у меня есть, когда выполняется поиск неисправностей

env -i sh -c "rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ [email protected]:/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]

Какие-нибудь советы по устранению этой проблемы?

Вот что я пробовал до сих пор, и у меня нет идей:

  1. Cron определенно работает ps aux | grep cron
  2. Ничего необычного в / var / log / syslog Sep 7 13:22:01 desktop CRON[6735]: (tom) CMD (sh /home/tom/Documents/Scripts/offsite-backup)

  3. SSH в терминале для удаленного сервера, когда пользователь резервного копирования работает ssh [email protected]

  4. Выполнение команды в терминале отлично работает rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ [email protected]:/backups/desktop/
  5. В ручном указании пути к файлу резервных копий пользовательский ключ не имеет эффекта rsync -lrstRO --delete --exclude 'lost+found' -e 'ssh -i /home/tom/.ssh/backups-only' /Backups/auto-daily-backups/./ [email protected]:/backups/desktop/

  6. Замена неработающей команды простой тестовой командой работает echo "Hello world" > ~/Desktop/test.txt

  7. Крики / ругань на компьютере не имели никакого эффекта (но заставили меня чувствовать себя лучше временно).

Изменить 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/./ [email protected]:/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) на сервере пустые & amp; ничего не делайте.

Кроме того, пользовательские резервные копии были созданы только на сервере и с ограниченными правами, с выделенным ключом SSH, скопированным на мой настольный компьютер. Я предполагаю, что это путь, потому что все работает при запуске команд вручную.

Файл crontab, вышедший выше, для меня - пользовательский "tom" на моем настольном компьютере. Мое намерение состоит в том, чтобы вызвать сценарий, который должен войти на сервер как пользовательское "резервное копирование только". Я просто попробовал запустить сценарий резервного копирования (а не команду внутри него), и он успешно подключился & amp; работал. Я запустил его на своем рабочем столе как пользователь "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
    
задан Tom Brossman 07.09.2014 в 13:05
источник

5 ответов

13

Поскольку все работает нормально из командной строки, ошибка Permission denied (publickey) означает, что часть SSH rsync использует другой файл идентификации, чем указанное имя пользователя.

От Комментарий Ян по исходному вопросу, мы можем указать файл идентификации в команде rsync , используя -e 'ssh -i /path/to/identity.file' ... .

Используя приведенную ниже команду, чтобы начать с новой среды в cron и указать полный путь к файлу, по-видимому, решает проблему:

env -i sh -c "rsync -lrstRO --delete --exclude 'lost+found' -e 'ssh -i /home/tom/.ssh/backups-only' /Backups/auto-daily-backups/./ [email protected]:/backups/desktop/"

Мне все еще очень интересно это открытие. Вероятно, это связано с cron, тем, что он начинается с минимальных переменных окружения и ssh-agent. Я создам тот же самый сценарий через пару дней, чтобы проверить его и отчитаться.

    
ответ дан Alaa Ali 15.09.2014 в 19:48
источник
0

Вы уже пробовали использовать старый трюк для очистки файлов хостов? Я имею в виду:

rm ~/.ssh/known_hosts

Стоит попробовать, так как ssh восстановит его, и вы избавитесь от устаревшего материала. Разумеется, вы также можете удалить части, принадлежащие данному IP / хосту.

Другие вопросы: выполняется ли ваше задание cron под вашим UID или оно работает как пользователь cron или root?

    
ответ дан runlevel0 14.09.2014 в 09:56
0

Используйте скрипт rrsync вместе с выделенным ключом ssh следующим образом:

REMOTE сервер

mkdir ~/bin
gunzip /usr/share/doc/rsync/scripts/rrsync.gz -c > ~/bin/rrsync
chmod +x ~/bin/rrsync

Локальный компьютер

ssh-keygen -f ~/.ssh/id_remote_backup -C "Automated remote backup"      #NO passphrase
scp ~/.ssh/id_remote_backup.pub [email protected]:/home/devel/.ssh

УДАЛЕННЫЙ компьютер

cat id_remote_backup.pub >> authorized_keys

Подготовить к новой добавленной строке следующие

command="$HOME/bin/rrsync -ro ~/backups/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding

Чтобы результат выглядел как

command="$HOME/bin/rrsync -ro ~/backups/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAA...vp Automated remote backup

LOCAL

Поместите в свой crontab следующий скрипт с разрешением x :

#!/bin/sh
echo ""
echo ""
echo "CRON:" 'date'
set -xv
rsync -e "ssh -i $HOME/.ssh/id_remote_backup" -avzP [email protected]:/ /home/user/servidor 

Источник: Ссылка

    
ответ дан Alessandro Cuttin 12.12.2016 в 15:56
0

Чтобы попробовать и отлаживать, добавьте в ssh часть «ssh -v» таким образом, вы можете получить подробный режим с некоторой полезной информацией.

Изменить: На странице man:

-v      Verbose mode.  Causes ssh to print debugging messages about its progress.  This is helpful in debugging connection,
             authentication, and configuration problems.  Multiple -v options increase the verbosity.  The maximum is 3.
    
ответ дан Pedro Luz 13.09.2017 в 08:36
-1

Я думаю, что вы не настроили файл sshd_config должным образом. Убедитесь, что PermitRootLogin yes и PubkeyAuthentication yes для удаленного обслуживания.

    
ответ дан Anandu M Das 15.09.2014 в 10:26