Я делаю частые резервные копии на локальный диск, который я хочу синхронизировать ежедневно к удаленному серверу.
Целевой сервер настроен для ключа 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]
Какие-либо подсказки относительно того, как диагностировать это далее?
Вот то, что я попробовал до сих пор, и я вне идей:
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 для всех пользователей (включая корень) на сервере пусты и ничего не делают.
Кроме того, пользователь, 'только для резервных копий', был создан только на сервере и с ограниченными правами со специальным ключом 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
Так как все хорошо работает из командной строки, ошибка 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 несколько дней, чтобы проверить его и сообщить.
Вы уже попробовали старый прием чистки файлов hosts? Я имею в виду:
rm ~/.ssh/known_hosts
Это стоит попробовать, поскольку ssh восстановит его, и Вы избавитесь от устаревшего материала. Можно, конечно, также удалить части, принадлежащие данному IP / Хост.
[еще 113] вопросы: Ваше задание крона работает под Вашим UID, или это работает как пользовательский крон или корень?
Используйте 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/
Чтобы попытаться отладить добавляют к 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.
Я думаю, что Вы не настроили sshd_config файл правильно. Проверьте что PermitRootLogin yes
и PubkeyAuthentication yes
для удаленного техобслуживания.
Я просто решил эту проблему, которая заставила меня напряженно трудиться..
Не могущий соединиться в 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 без любой проблемы.
Это заставило меня напряженно трудиться, но теперь, это работает :)
Протест для тех, кто использует Передачу Агента 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
.