sudo: no tty present and no askpass program specified
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.
Question:
How can I work around this?
sudo: no tty present and no askpass program specified
Alternate Answer
As an alternative, try:
sudo -S ./[yourExecutable]
This directs sudo to read the password from the standard input, stdin.
Scenarios where this Helps
In chroot environments, these other answers may not work correctly ... perhaps because:
- /etc/shadow vs /etc/passwd conflict not allowing the user to enter a password.
- In a chroot-ed environment, access to tty1 can be a bit glitchy, and ctrl-alt f2 -- to tty2 is unfeasible, because it is a tty of the non-chroot-ed environment.
For example: Manually installing / repairing linux or the bootloader, using a chroot environment, (such as Archlinux and arch-chroot).
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)