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.
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.
Исправляем ошибку «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
Доброго времени суток дорогие читатели. На днях столкнулся я с проблемой удаленного запуска команды с повышенными правами. Ошибка звучит так:»sudo: no tty present and no askpass program specified«. Это означает что sudo не может использоваться при отсутствии терминала.
Для решения данного вопроса есть два варианта.
Вариант первый
Команда 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.