Назад | Перейти на главную страницу

ssh подключается нормально из командной строки, но из cron с помощью publickey

В 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, чтобы иметь открытый ключ рабочей станции.