Запуск сценариев sudo / команд bash на удаленном компьютере - PullRequest
0 голосов
/ 07 мая 2018

Мне нужно удаленно запустить bash-скрипты, которые выполняют задачи sudo, такие как chmod и ntpdate и выводят их на gpio.

Работа cron может быть лучшим решением для некоторых из этого, но cron вызывает у меня головную боль. Я хотел бы пройти на это место, если смогу ...

Я подтвердил, что мои скрипты работают локально (я могу подключиться к машине по ssh и запустить их без проблем).

Однако, если я попытаюсь запустить их удаленно, как показано ниже: (это в рамках системного вызова C ++)

ssh user @ pc 'bash -s'

Команды с sudo терпят неудачу.

sudo chmod завершается с ошибкой: tty отсутствует и не задана программа askpass echo to gpio завершается с ошибкой: write error: устройство или ресурс занят sudo ntpdate завершается с ошибкой: tty отсутствует и не задана программа askpass

Может кто-нибудь помочь объяснить или помочь мне определить, что здесь происходит?

Я открыт для бинтов и разных подходов, спасибо!

1 Ответ

0 голосов
/ 07 мая 2018

Вы уже нашли проблему самостоятельно:

Сбой sudo chmod с: tty отсутствует и не задана программа askpass

Если вы запускаете сценарий оболочки через ssh и сценарий хочет выполнить команду sudo, само sudo запросит пароль пользователя. Но сессия ssh не является tty! Как sudo теперь запрашивает пароль и как получить пароль?

Вы можете сделать это, если вы введете пароль в сценарии (что делает его очень опасным, если кто-то другой может прочитать этот сценарий!)

script.sh:

эхо "ваш пароль" | sudo -S

В качестве альтернативного решения вы можете запустить сеанс ssh с более привилегированным пользователем.

ssh privileged_user @ pc 'bash -s'

Все это связано с некоторой опасностью. Выполнение всех команд из крипты с более привилегированным пользователем также может быть опасным!

...