Linux sudo no tty

Cannot SUDO SU anymore, «no tty present and no askpass program specified»

I have a root server where I disabled login via user root and created another user that is in the sudoer list. So when I want to work on the server I do:

enter my password to get root rights. This worked fine for 6 months now. Today I get this message when doing sudo su:

sudo: no tty present and no askpass program specified 

What the hack is happening? What does this error mean and why do I get it?? Without root rights I cannot do so much on the server. Any idea how to fix this?

Try logging in with ssh -t username@host, and please, don’t use «sudo su», there’s a switch to sudo especially for this purpose. Use sudo -s instead, or just su if you’d like to type the root password.

@superjedi does not work either. Even with the root password. I think I have to reset the server tonight because I have no idea why it is not working.

When you log into the remote server (and before running sudo), do you actually have a tty? Running «tty» should print the name of your tty. After that, I’d check the permissions on your tty device and on «/dev/tty» to see if they’re screwed up.

Читайте также:  Alt linux статический ip адрес

sudo actually opens «/dev/tty» for read-write and prints that error if it fails. Check the perms on that.

3 Answers 3

sudo tries to open /dev/tty for read-write and prints that error if it fails. You’ve indicated in comments that /dev/tty is missing on your system.

Sudo has an option -S to read the password from standard input instead of /dev/tty. You should be able to run sudo -S to become root.

Regarding how to recover /dev/tty, It’s possible that rebooting the server would be sufficient; the system might recreate all devices in /dev during bootup. Alternately, to create a device, you use the mknod command, but you need to know the correct major and minor numbers for the tty device. On an Ubuntu system I have available, I see these entries in /dev:

crw------- 1 root root 5, 1 Apr 16 18:36 console crw-rw-rw- 1 root tty 5, 2 Sep 24 15:35 ptmx crw-rw-rw- 1 root tty 5, 0 Sep 24 14:25 tty 

In this case, the major number is 5 and the minor number is 0. /dev/console and /dev/ptmx have the same major number. So I’d inspect /dev/console or /dev/ptmx to find the correct major number, then run:

where «major» is the correct major number.

After recreating /dev/tty, make sure the permissions are correct:

Источник

Исправляем ошибку «sudo: sorry, you must have a tty to run sudo»

Недавно, используя ssh команду (для примера приведу ее):

ssh -p 2231 User_of_Backup@Server_IP_Backup sudo mv /home/User_of_Backup/HostName-* /home/getdb/remote_dump/Home_Dir*
sudo: sorry, you must have a tty to run sudo

Это говорит о том, что вероятно, вы работаете на Linux дистрибутиве с sudo который настроен так, чтобы запрашивать TTY. Это правило прописано в /etc/sudoers при наличии Defaults requiretty. В некоторых дистрибутивах это правило встроено в качестве конфигурации по умолчанию. RedHat, недавно удалили его из Fedora и REHL см Bug 1020147.

Читайте также:  Настройка маршрутизации между двумя сетями linux

Исправляем ошибку «sudo: sorry, you must have a tty to run sudo»

Чтобы отключить requiretty глобально или просто к одной команде, можно несколькими способами:

  • Заменить значения по умолчанию «Defaults !requiretty» в /etc/sudoers файле. Это повлияет на вашу глобальную конфигурацию SUDO. В качестве альтернативы, вы можете изменить эту конфигурацию для каждого пользователя, для каждой группы или для командны:
Defaults!/path/to/my/bin !requiretty Defaults:myuser !requiretty

Чтобы это сделать, выполните команду:

Закомментируйте линии или удалите строку:

PS: Или используйте строки, которые я привел выше.

-t Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local tty.

Команды могут выглядеть так:

# ssh -t host_or_IP sudo your_command_here # ssh -t your_host_user@host_or_IP sudo your_command_here # ssh -tyour_host_user@host_or_IP sudoyour_command_here /path_to_your_file

Имеется спицифика выполнения команд на различных Linux дистрибутивах, например в RHEL/CentOS:

# su --session-command="/path_to_your_command some_arg_number_1 some_arg_number_2"
# su -c '/path_to_your_command some_arg_number_1 some_arg_number_2'
# ssh your_ssh_user@linux-notes.org su --session-command="/path_to_your_command some_arg_number_1 some_arg_number_2"
# ssh your_some_ssh_user@linux-notes.org -c '/path_to_your_command some_arg_number_1 some_arg_number_2'

Можно запустить /my_script_path/job66 как «my_user» пользователь который имеет синтаксис:

# ssh ssh_user@linux-notes.org su --session-command="/my_script_path/my_job /nas" my_user
# ssh user_of_ssh@linux-notes.org su captain_user -c "/my_script_path_here/my_job /nas"

Другой вариант заключается в использовании следующего синтаксиса:

# echo -e "\n"|sudo -S your_some_command_here

Все, ошибка «sudo: sorry, you must have a tty to run sudo» решена.

Источник

sudo: no tty present and no askpass program specified

no tty present

Доброго времени суток дорогие читатели. На днях столкнулся я с проблемой удаленного запуска команды с повышенными правами. Ошибка звучит так:»sudo: no tty present and no askpass program specified«. Это означает что sudo не может использоваться при отсутствии терминала.

Читайте также:  Linux создать ограниченного пользователя

Для решения данного вопроса есть два варианта.

Вариант первый

Команда sudo имеет специальный ключ -n либо —non-interactive который позволяет использовать команду в отсутствии терминала

Дословно -n включает неинтерактивный режим (подсказки не используются)

Вариант второй

При удаленном запуске команд по ssh можно использовать ключ -t для запуска sudo команд

-t — Force pseudo-terminal allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services. Multi‐ple -t options force tty allocation, even if ssh has no local tty.

Если кратко то он позволяет использовать sudo при удаленном запуске команд без подключения терминала.

ssh -t root@newadmin.ru 'sudo ls'

Можно прочитать тут как отключить постоянный ввод пароля sudo.

Источник

Оцените статью
Adblock
detector