41

У меня есть интерактивный сценарий оболочки, который в одном месте должен подключиться по ssh к другому компьютеру (на основе Ubuntu) и выполнить что-либо от имени пользователя root (пользователь должен ввести свой пароль, но удаленная команда должна выполняться, как указано в сценарии):

# ...
ssh remote-machine 'sudo ls'
# ...

Тем не менее, я всегда получаю это сообщение об ошибке:

sudo: no tty present and no askpass program specified

ОК, это совершенно ясно. Но как я могу обойти это? Нечто подобное должно произойти:

$ ssh remote-machine 'sudo ls /'
[sudo] password for user1:

/bin
/etc
/var

3 ответа3

49

У чудесного ssh есть лекарство от всего. Смысл в том, чтобы добавить флаг -t чтобы заставить ssh выделить псевдо-tty:

ssh -t remote-server 'sudo ls'
0

Этот метод будет запускать один скрипт с использованием sudo после ssh:

Давайте предположим, что у нас есть "удаленный" пользователь с возможностями sudo, и у нас есть скрипт, который мы хотим, чтобы он выполнялся от имени пользователя root.

1) Установите скрипт в /etc/passwd, который будет использоваться при входе в систему:

remote:x:1100:1100:Some Remote User,,,:/home/remote:/home/remote/login.sh

2) Внутри «login.sh» мы выполняем скрипт, который хотим запустить как "sudo":

#!/bin/bash
if [ "$(id -u)" != "0" ]; then
    #Not running as root, so we execute "sudo"
    sudo /usr/local/bin/script.sh
else
    #We are already rooted, so "sudo" is not required.
    /usr/local/bin/script.sh
fi
exit;

Обычно он спрашивает пароль дважды: ssh login + sudo. Если вы хотите ввести его только один раз, попробуйте sudo без пароля (не рекомендуется). <- пожалуйста, прочитайте комментарий Болдевина.

Основным преимуществом является то, что "ssh" не требует никаких других параметров (например, -t), и sudo принудительно устанавливается на стороне сервера. Кроме того, после выхода из скрипта пользователь также выходит из системы.

Это может быть не так элегантно, но просто и работает.

-1

Вы можете выполнить следующую команду получить root-доступ без интерактивности:

ssh server " sudo command" < sudopassword.txt

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .