В 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 [email protected]$RHOST:$RPATH $LPATH

Я запускаю этот скрипт из командной строки /path-to-local-script-file

и он работает нормально, но если я добавлю эту строку в crontab -e

00 00   * * *   /path-to-local-script-file

Я получаю сообщение об ошибке cron "Permission denied, please try again", когда он выполняется

Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
rsync: connection unexpectedly closed (0 bytes received so far)
[Receiver] rsync error: unexplained error (code 255) at io.c(235) [Receiver=3.1.2]
*** ERROR: rsync returned code 255

Очевидно, это вопрос разрешения. Я не понимаю, почему я могу выполнить /path-to-local-script-fileиз командной строки и успешно выполнить задачу rsync как пользователь mynameи не могу сформировать cron(crontab -e выполняется от имени того же пользователя.

Изменить 1: я создал новый ключ без парольной фразы, удалил старую строку rsa-ssh с открытым ключом из authorized_keys на удаленном сервере.
Такое же поведение, нормально, запуск скрипта из командной строки, разрешение отклонено от cron

Изменить 2:
журнал сервера, подключающий ssh ​​из командной строки

May 23 10:20:53 host sshd[21067]: Accepted publickey for root from xxx.xxx.6.13 port 42836 ssh2

May 23 10:20:53 host sshd[21067]: pam_unix(sshd:session): session opened for user root by (uid=0)

Журнал сервера, подключающий ssh ​​к cron

May 23 10:17:03 host sshd[18163]: Failed password for root from xxx.xxx.6.13 port 42514 ssh2

May 23 10:17:03 host sshd[18163]: Failed password for root from xxx.xxx.6.13 port 42514 ssh2

May 23 10:17:03 host sshd[18164]: Connection closed by xxx.xxx.6.13

answer

Похоже, что вы запускаете скрипт вручную как пользователь без полномочий root, а cron запускает его как root.

В этом случае вам нужно будет определить путь к закрытому ключу ssh.

Если вы подключаетесь как root к удаленному серверу (плохо), вам понадобится root authorized_keys, чтобы иметь открытый ключ рабочей станции.