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?
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?
A 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.
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).
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 need to define terminal/application that will read the password. There are two variants:
export SUDO_ASKPASS=/usr/libexec/openssh/ssh-askpassvim /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?
– Drew Noakes
May 16 '14 at 19:57
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.
sudorequires a tty to prompt for a password, and when specifying commands to run tossh, 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. – psusi Apr 15 '13 at 14:39-tt, required when passing command using heredoc – Rufus Nov 28 '18 at 00:44