linux

sudo: sorry, you must have a tty to run sudo

Потребовалось выполнить команду из-под sudo на удаленном сервере.

Самое простое, что могло прийти в голову — это использовать stdin чтобы передать пароль для sudo (скрипт не ждет пользовательского ввода).

$ ssh server "echo password | sudo command"

Увы. Было получено сообщение из заголовка статьи.

Почему вообще такое происходит? Причина в том, что конфиг /etc/sudoers содержит опцию (если ее нет, то включите :))

Defaults requiretty
     requiretty        If set, sudo will only run when the user is logged in
                       to a real tty.  When this flag is set, sudo can only be
                       run from a login session and not via other means such
                       as cron(8) or cgi-bin scripts.  This flag is off by
                       default.

Как обойти эту опцию не правя конфиги? Довольно просто.

Нам потребуется использовать опцию -t для ssh, которая заставляет клиента принудительно открывать псевдотерминал даже если нужды в нем нет (работаем с stdin). А для sudo потребуется опция -S, которая заставляет считывать пароль из stdin.

$ ssh -t server "echo password | sudo -S command"

Работает.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

w

Connecting to %s