При попытке запустить удаленный двоичный файл с помощью sudo
на пульте дистанционного управления:
ssh remotehost "sudo ./binary"
Я вижу эту ошибку:
sudo: no tty present and no askpass program specified
Как я могу обойти это?
При попытке запустить удаленный двоичный файл с помощью sudo
на пульте дистанционного управления:
ssh remotehost "sudo ./binary"
Я вижу эту ошибку:
sudo: no tty present and no askpass program specified
Как я могу обойти это?
Простой способ - указать -t
:
ssh -t remotehost "sudo ./binary"
Со справочной страницы:
Принудительное выделение псевдо-tty. Это может быть использовано для выполнения произвольных экранных программ на удаленном компьютере, что может быть очень полезно, например, при реализации служб меню. Параметры Multiple -t принудительно выделяют tty, даже если ssh не имеет локального tty.
Я не могу точно объяснить, почему это работает, и, возможно, есть лучший способ. Я хотел бы услышать об этом, если это так :)
@psusi объясняет, почему это работает, в комментарии ниже.
Как я могу обойти это?
sudo: no tty present and no askpass program specified
В качестве альтернативы попробуйте:
sudo -S ./[yourExecutable]
Это позволяет sudo считывать пароль из стандартного ввода, stdin.
В средах chroot эти другие ответы могут работать некорректно ... возможно, потому, что:
Например: Установка / восстановление linux или загрузчика вручную с использованием среды chroot (например, Archlinux и arch-chroot).
Вам нужно определить терминал / приложение, которое будет считывать пароль. Есть два варианта:
export SUDO_ASKPASS=/usr/libexec/openssh/ssh-askpass
vim /etc/sudoers
(По умолчанию visiblepw)Это терпит неудачу, потому что sudo
пытается запросить пароль root, но псевдо-tty не выделен.
Вы должны либо войти в систему с правами root, либо настроить следующие правила в своем /etc/sudoers
(или: sudo visudo
):
# Members of the admin group may gain root privileges%admin ALL=(ALL) NOPASSWD:ALL
Затем убедитесь, что ваш пользователь принадлежит к admin
группа (или wheel
).
В моем случае я получил эту ошибку, потому что я не указывал команду, которую я хотел бы использовать в качестве root в sudoers
Что-то вроде
/etc/sudoers.d/myuser
:
myuser ALL=(root) NOPASSWD: \ /bin/ls -la
сработало для меня
Вы также можете создать файл типа "sudo_shutdown" в /etc/sudoers.d с содержимым:
# Allow admins to shutdown without pass%adm ALL=(ALL) NOPASSWD: /sbin/shutdown
Это позволяет пользователям, входящим в группу adm, завершать работу без ввода пароля.