sudo: Sorry, you must have a tty to run sudo Error on a Linux and Unix

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)

Один комментарий

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

двенадцать − шесть =