When attempting to run a remote binary using sudo
on the remote box:
ssh remotehost "sudo ./binary"
I see this error:
sudo: no tty present and no askpass program specified
How can I work around this?
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It only takes a minute to sign up.
Sign up to join this communityA simple way is to specify -t
:
ssh -t remotehost "sudo ./binary"
From the man page:
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.
I cannot explain exactly why this works, and there may be a better way. I'd like to hear about it if so :)
@psusi explains why this works in a comment below.
sudo
requires a tty to prompt for a password, and when specifying commands to run to ssh
, it doesn't allocate one by default since this is normally used to run non interactive commands that may transfer binary data, which can trip up the tty.
How can I work around this?
sudo: no tty present and no askpass program specified
As an alternative, try:
sudo -S ./[yourExecutable]
This directs sudo to read the password from the standard input, stdin.
In chroot environments, these other answers may not work correctly ... perhaps because:
For example: Manually installing / repairing linux or the bootloader, using a chroot environment, (such as Archlinux and arch-chroot).
It fails, because sudo
is trying to prompt on root password and there is no pseudo-tty allocated.
You've to either log-in as root or set-up the following rules in your /etc/sudoers
(or: sudo visudo
):
# Members of the admin group may gain root privileges
%admin ALL=(ALL) NOPASSWD:ALL
Then make sure that your user belongs to admin
group (or wheel
).
You need to define terminal/application that will read the password. There are two variants:
export SUDO_ASKPASS=/usr/libexec/openssh/ssh-askpass
vim /etc/sudoers
(Defaults visiblepw)visudo
instead of vim /etc/sudoers
in order to avoid potentially locking yourself out of your machine due to having made an error in your edit?
May 16, 2014 at 19:57
In my case I've received this error because I wasn't specifying a command that I would like to use as root in the sudoers
Something like
/etc/sudoers.d/myuser
:
myuser ALL=(root) NOPASSWD: \
/bin/ls -la
worked for me
You can also create a file like "sudo_shutdown" in /etc/sudoers.d, with content:
# Allow admins to shutdown without pass
%adm ALL=(ALL) NOPASSWD: /sbin/shutdown
This allows users which are in the adm group to shutdown without a password.