Search code examples
linuxsshsudo

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:

ssh myusername@IP_ADDRESS

On the server:

sudo su

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?


Solution

  • 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:

    mknod /dev/tty c major 0
    

    where "major" is the correct major number.

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

    chmod 666 /dev/tty