При попытке запустить удаленный двоичный файл с помощью 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-askpassvim /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, завершать работу без ввода пароля.