sudo: Sorry, you must have a tty to run sudo Error on a Linux and Unix
Я пытаюсь выполнить следующую команду
ssh user@box.example.com sudo command1 /path/to/file
Но отображается следующая ошибка:
sudo: sorry, you must have a tty to run sudo
OR
sudo: no tty present and no askpass program specified
ак мне решить эту проблему в системах на базе Linux или Unix?
Это сделано в Fedora, RHEL, CentOS, многих других дистрибутивах Linux и Unix-подобных системах из соображений безопасности, так как пароль будет отображаться в открытом текстовом формате.
Что исправить в оболочке bash Linux или Unix?
Вы должны запустить свою команду ssh следующим образом, чтобы избежать ошибки, которая читается как
sudo: Sorry, you must have a tty to run sudo Error:
ssh -t hostname sudo command ssh -t user@hostname sudo command ssh -t user@box.example.com sudo command1 /path/to/file |
Пример сеанса:
Параметр -t принудительно выделяет псевдо-tty. Это может использоваться для выполнения произвольных экранных программ на удаленном компьютере, что может быть очень полезно, например, при реализации служб меню. Несколько параметров -t принудительно выделяют tty, даже если ssh не имеет локального tty.
Параметр requiretty в файле sudoers
Если набор в sudoers файлов Судо конфигурации, Судо будет работать только тогда , когда пользователь вошел в систему с реального терминала. Когда этот флаг установлен, sudo можно запускать только из сеанса входа в систему, а не с помощью других средств, таких как скрипты cron, shell/perl/python или cgi-bin scripts. Этот флаг установлен по умолчанию на многих дистрибутивах. Отредактируйте /etc/sudoers, введите:
# visudo
Найдите строку, которая гласит
Defaults requiretty
Либо закомментируйте строку, либо удалите строку:
#Defaults requiretty
Сохраните и закройте файл.
Как запустить команду без опции -t?
Вы можете использовать команду su вместо команды sudo следующим образом:
## NOTE: RHEL/CentOS specific syntax ## su --session-command="/path/to/command1 arg1 arg2" ## others ## su -c '/path/to/command1 arg1 arg2' |
ИЛИ
ssh user@server1.nixcraft.in su --session-command="/path/to/command1 arg1 arg2" OR ssh user@server1.nixcraft.in su -c '/path/to/command1 arg1 arg2' |
Вы можете запустить /scripts/job5143 как пользователь vivek, используя тот же синтаксис:
ssh user@server1.nixcraft.in su --session-command="/scripts/job1 /nas" vivek OR ssh user@server1.nixcraft.in su vivek -c "/scripts/job1 /nas" |
Другой вариант — использовать следующий синтаксис:
echo -e "\n"|sudo -S command |
Справочные страницы для получения дополнительной информации– visudo(8)
Уведомление: Reboot Linux System Command - INFOIT.COM.UA