1

Я посмотрел на многочисленные вопросы, но, похоже, не нашел именно то, что искал.

Я создал скрипт, в котором я пытаюсь запустить rsync через ssh, и в конечном итоге он будет помещен в работу cron. Все переменные определены, и важная часть скрипта гласит:

$RSYNC -az --stats -e "$SSH -i $KEY" $RUSER@RHOST:$RPATH $LPATH

KEY указывает на мой закрытый ключ, публичный скопирован в RHOST и добавлен авторизованным пользователям.

В настоящее время разрешения на RPATH равны 775. Когда я пытаюсь запустить скрипт, мне предлагается ввести пароль RHOSTs, который не очень полезен для задания cron.

Однако, если я изменю разрешения для RPATH на 755, сценарий будет запущен без запроса пароля. К сожалению, я не могу сделать это изменение навсегда.

Итак, у меня есть вопрос из трех частей;
Во-первых, это rsync или ssh вызывает у меня проблемы?
Во-вторых, почему это так? Для меня не имеет смысла, что разрешение групповой записи в каталог должно иметь значение при запросе пароля.
В-третьих, и, наконец, я ищу идеи о том, как решить эту проблему. RUSER имеет привилегии sudo. (Я лучше не встраивать пароль в командной строке.)

Заранее спасибо за помощь!

2 ответа2

1

Итак, вот что я в итоге сделал, @MariusMatutiae направил меня в правильном направлении!

Основываясь на некоторых других рекомендациях, я обнаружил, что запускаю rsync как sudo поверх ssh. Я создал нового пользователя BKUPuser на удаленном хосте и добавил этого пользователя в группу RHOST, которой принадлежат файлы, которые я пытаюсь сделать резервную копию.

В sudoers я добавил две строки:
BKUPuser ALL= NOPASSWD:/usr/bin/rsync это остановило ошибку: «sudo: нет tty присутствует и не задана программа askpass» ( https://unix.stackexchange.com/questions/92123/rsync-all-files-of -remote-machine-over-ssh-без-root-user ) Я понимаю, что это имеет некоторые уязвимости безопасности, но ни одна из машин не видна внешнему миру.

Второе дополнение:
Defaults:user !requiretty эта остановленная ошибка: "sudo: извините, у вас должен быть tty для запуска sudo"

Затем команда оказалась:
$RSYNC -e "$SSH -i $KEY -t -l BKUPuser" --rsync-path='sudo rsync'-az --stats BKUPuser@RHOST:$RPATH $LPATH

Единственная проблема, которая у меня остается, - это сообщение об ошибке «Psuedo-терминал не будет выделен, потому что stdin не является терминалом». Поскольку rsync выполняет резервное копирование файлов, на данный момент это раздражает. Я попытался использовать -t -t как предложено https://stackoverflow.com/questions/7114990/pseudo-terminal-will-not-be-allocated-because-stdin-is-not-a-terminal, но безуспешно.

1

Согласно инструкции (man rsync), вы не используете правильный параметр -l :

Если вам нужно указать другого пользователя удаленной оболочки, имейте в виду, что префикс user @ перед хостом указывает значение rsync-user (для модуля, который требует аутентификацию на основе пользователя). Это означает, что вы должны указать опцию «user-s» для ssh при указании удаленной оболочки, как в этом примере, который использует короткую версию опции --rsh:

       rsync -av -e "ssh -l ssh-user" rsync-user@host::module /dest

   The "ssh-user" will be used at the ssh level; the "rsync-user" will be used to log-in to the "module".

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .