В rsync (инкрементальный) с удаленного сервера (Centos 6.x) на локальный клиент (Ubuntu 18.04) я скопировал открытый ключ, который я создал, с клиента на сервер, чтобы выполнить rsync без пароля.
PasswordAuthentication yes
в sshd_config
В локальной Ubuntu у меня есть исполняемые скрипты, которые выглядят как
#!/bin/sh
RSYNC=/usr/local/bin/rsync-incr
SSH=/usr/bin/ssh\ -p\ xxxx
ROTATE=60
RUSER=yyyy
RHOST=zzzz
RPATH=/path-to-remote-dir/
LPATH=/path-to-local-dir/
$RSYNC -az --rsh="$SSH" $ROTATE $RUSER@$RHOST:$RPATH $LPATH
Я запускаю этот скрипт из командной строки /path-to-local-script-file
и он работает нормально, но если я добавлю эту строку в crontab -e
00 00 * * * /path-to-local-script-file
Я получаю сообщение об ошибке cron "Permission denied, please try again", когда он выполняется
В доступе отказано (publickey, gssapi-keyex, gssapi-with-mic, пароль).
rsync: соединение неожиданно закрыто (на данный момент получено 0 байт)
[Receiver] ошибка rsync: необъяснимая ошибка (код 255) в io.c (235) [Receiver = 3.1.2]
*** ОШИБКА: rsync вернул код 255
Очевидно, это вопрос разрешения. Я не понимаю, почему я могу выполнить /path-to-local-script-file
из командной строки и успешно выполнить задачу rsync как пользователь myname
и не может образовывать cron
(crontab -e выполняется от имени того же пользователя.
Изменить 1: я создал новый ключ без ключевой фразы, удалил старую строку rsa-ssh с открытым ключом из authorized_keys на удаленном сервере.
Такое же поведение, нормально, запуск скрипта из командной строки, разрешение отклонено от cron
Изменить 2:
Журнал сервера, подключающий ssh из командной строки
23 мая, 10:20:53 host sshd [21067]: принят публичный ключ для root от xxx.xxx.6.13 порт 42836 ssh2
23 мая, 10:20:53 host sshd [21067]: pam_unix (sshd: session): сеанс открыт для пользователя root пользователем (uid = 0)
Журнал сервера, подключающий ssh к cron
23 мая, 10:17:03 host sshd [18163]: неверный пароль для root от xxx.xxx.6.13 порт 42514 ssh2
23 мая, 10:17:03 host sshd [18163]: неверный пароль для root от xxx.xxx.6.13 порт 42514 ssh2
23 мая, 10:17:03 host sshd [18164]: соединение прервано xxx.xxx.6.13
Похоже, что вы запускаете скрипт вручную как пользователь без полномочий root, а cron запускает его как root.
Если это так, вам нужно будет определить путь к закрытому ключу ssh.
Если вы подключаетесь как root к удаленному серверу (плохо), вам понадобится root authorized_keys, чтобы иметь открытый ключ рабочей станции.