Для rsync (инкрементальной) с удаленного сервера (Centos 6.x) на локальный клиент (Ubuntu 18.04) я скопировал открытый ключ, который я создал, с клиента на сервер, чтобы выполнить rsync без пароля.
PasswordAuthentication да
в 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»
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 хост sshd [21067]: принят открытый ключ для root от xxx.xxx.6.13 порт 42836 ssh2
23 мая 10:20:53 хост 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 хост sshd [18163]: неверный пароль для root от xxx.xxx.6.13 порт 42514 ssh2
23 мая 10:17:03 хост sshd [18164]: соединение закрыто xxx.xxx.6.13
Похоже, что вы запускаете скрипт вручную как пользователь без полномочий root, а cron запускает его как root.
В этом случае вам нужно будет определить путь к закрытый ключ ssh.
Если вы подключаетесь к удаленному серверу с правами root (плохо), то вам понадобится root authorized_keys, чтобы иметь открытый ключ рабочей станции