Почему этот rsync + ssh задание крона, дающее мне 'Разрешение, отклоненное в ' ошибках (с открытым ключом)?

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

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

Я использую крон и 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]

Какие-либо подсказки относительно того, как диагностировать это далее?


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

  1. Крон определенно работает 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 backups-user@XX.XX.XX.XX

  4. Выполнение команды в Терминальных работах отлично rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
  5. Вручную определение пути к ключу резервного пользователя не имеет никакого эффекта 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/

  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/./ 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 для всех пользователей (включая корень) на сервере пусты и ничего не делают.

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

crontab файл, отправленный выше, для меня, пользователя 'tom' на моей настольной машине. Мое намерение состоит в том, чтобы иметь его, называют сценарий, который должен войти в систему сервера как пользователь, 'только для резервных копий'. Я просто попытался запустить резервный скрипт (а не команда в нем), и это успешно соединилось и работало. Я выполнил его на своем рабочем столе как пользователь 'tom', тот же пользователь, который создал задание крона, которое не будет работать. Вот вывод от журнала сервера, соответствующего с тем успешным входом в систему

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
19
задан 13 April 2017 в 05:24

7 ответов

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

От комментарий Jan's об исходном вопросе, мы можем определить файл идентификационных данных в rsync команда с помощью -e 'ssh -i /path/to/identity.file' ....

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

env -i sh -c "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/"

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

14
ответ дан 23 November 2019 в 02:02

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

rm ~/.ssh/known_hosts

Это стоит попробовать, поскольку ssh восстановит его, и Вы избавитесь от устаревшего материала. Можно, конечно, также удалить части, принадлежащие данному IP / Хост.

[еще 113] вопросы: Ваше задание крона работает под Вашим UID, или это работает как пользовательский крон или корень?

0
ответ дан 23 November 2019 в 02:02

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

Локальный компьютер Удаленного сервера

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 devel@10.10.10.83:/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

ЛОКАЛЬНЫЙ

Вставленный в Ваш crontab следующий сценарий с x разрешение:

#!/bin/sh
echo ""
echo ""
echo "CRON:" `date`
set -xv
rsync -e "ssh -i $HOME/.ssh/id_remote_backup" -avzP devel@10.10.10.83:/ /home/user/servidor 

Источник: http://www.guyrutenberg.com/2014/01/14/restricting-ssh-access-to-rsync/

0
ответ дан 23 November 2019 в 02:02

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

Редактирование: Из страницы справочника:

-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.
0
ответ дан 23 November 2019 в 02:02

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

-1
ответ дан 23 November 2019 в 02:02

Я просто решил эту проблему, которая заставила меня напряженно трудиться..

Не могущий соединиться в RSYNC по SSH, несмотря на то, что предусмотрел идентификационные данные для SSH... Ничто не сделано... Rsync заявляет "разрешение, отклоненное", и ssh говорит мне "read_passphrase: не может открыть/dev/tty: Никакое устройство или адрес этого типа"

, Но я читал сообщение, которое объяснило, что crontab имеет свою собственную среду, которая не является тем же как корнем. Я уже знал, что, но я не понял влияние, которое это могло оказать на SSH при использовании SSH-АГЕНТА

, Но мои ключевые обмены SSH, сделаны с PassPhrase... поэтому, если среда отличается, и мой RSYNC по SSH ожидает пароль, который не может быть введен =>, информация об отладке SSH также указывает на ошибку:

"debug1: read_passphrase: не может открыть/dev/tty: Никакое такое устройство или адрес" => Хорошо да никакой TTY = никакой пароль = не позволенный

На моей машине, я использую "Связку ключей", чтобы запустить агент SSH, таким образом, я не должен повторно входить в пароль каждый раз, я пробую удаленное соединение. Связка ключей генерирует файл, который содержит следующую информацию

SSH_AUTH_SOCK =/tmp/ssh-PWg3yHAARGmP/agent.18891; SSH_AUTH_SOCK экспорта; SSH_AGENT_PID = 18893; SSH_AGENT_PID экспорта;

==> команда SSH-AGENT возвращает ту же информацию

Так, в конце, это - они информация, связанная с текущей сессией, которые позволяют будущую аутентификацию текущей сессии без потребности ввести пароль, потому что уже сделанный ранее и запомнил...

==> решение там... это находится достаточно в сценарии, запущенном crontab, и "получать" файл, содержащий эту информацию или делать это на командной строке ds crontab...

пример: 14 09 * * *./home/foo/.keychain/foo.serveur.org-sh & & scp-vvv-P 22/tmp/mon_fic/toto.sh foo@my-server.fr:.>> / var / регистрируются / check_connexion.log 2> & 1 или использование команда "источник/home/foo/keychain/foo.server.org-sh" в сценарии, который запускает соединение с помощью SSH.

=> С этим определением источника, больше никакого беспокойства. Информация SSH_AUTH_SOCK и SSH_AGENT_PID загружается в среде Crontab и поэтому известна, RSYNC по работам SSH без любой проблемы.

Это заставило меня напряженно трудиться, но теперь, это работает :)

1
ответ дан 23 November 2019 в 02:02

Протест для тех, кто использует Передачу Агента SSH:

, Если Вы видите это поведение при отладке сценария на удаленном хосте, это - потому что даже с эти -e "ssh -i /path/to/key" флаг, ssh будет использовать локальный (переданный) ключ, а не тот на сервере.

Конкретный пример: у Меня есть сценарий на dev сервере, который вытягивает в данных из "сервера данных" с помощью rsync по ssh. Когда я вхожу в dev сервер и выполняю его, все хорошо, но при выполнении от крона, я отклонил разрешение. При добавлении некоторого многословия к процессу SSH (флаг -vv) я заметил следующее:

debug2: key: /home/nighty/.ssh/id_rsa (0x562d8b974820),
debug2: key: /home/juanr/.ssh/id_rsa (0x562d8b962930), explicit
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/nighty/.ssh/id_rsa
debug2: we sent a publickey packet, wait for reply
debug1: Server accepts key: pkalg ssh-rsa blen 279
debug2: input_userauth_pk_ok: fp 1a:19:08:9f:80:16:b1:db:55:42:9a:52:b2:49:9b:0a
debug1: Authentication succeeded (publickey).

, Что хорошо осведомленный меня прочь вот то, что чистым шансом, у меня, оказывается, есть другое имя пользователя на локальном хосте ("ночная рубашка"), чем на dev сервере ("juanr").

Уведомление, как это отмечает ключ на dev сервере как "явный", но все еще использует переданный ключ от моего ноутбука для входа в систему. Выполнение ssh-copy-id в этой точке ничего не разрешает, потому что это просто переустанавливает переданный ключ, а не тот с dev сервера. При использовании ssh-copy-id с передачей агента необходимо указать, который ключ установить с-i отметьте: ssh-copy-id -i ~/.ssh/id_rsa.pub user@host.

1
ответ дан 23 November 2019 в 02:02

Другие вопросы по тегам:

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