У меня есть интерактивный сценарий оболочки, который в одном месте должен подключиться по 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
ls
вывод будет содержать \ r \ n окончания, например.ls | cat
будет делать - он увидит, что стандартный вывод - это труба. В этом конкретном вопросе это не актуально, так как он, очевидно, предназначен для интерактивного запуска из терминала - поэтому вам, вероятно, нужны столбцы, цвета и все такое.Этот метод будет запускать один скрипт с использованием sudo после ssh:
Давайте предположим, что у нас есть «удаленный» пользователь с возможностями sudo, и у нас есть скрипт, который мы хотим, чтобы он выполнялся от имени пользователя root.
1) Установите скрипт в / etc / passwd, который будет использоваться при входе в систему:
remote:x:1100:1100:Some Remote User,,,:/home/remote:/home/remote/login.sh
2) Внутри «login.sh» мы выполняем скрипт, который хотим запустить как «sudo»:
Обычно он спрашивает пароль дважды: ssh login + sudo. Если вы хотите ввести его только один раз, попробуйте sudo без пароля (не рекомендуется). <- пожалуйста, прочитайте комментарий Болдевина.
Основным преимуществом является то, что «ssh» не требует никаких других параметров (например, -t), а sudo принудительно устанавливается на стороне сервера. Кроме того, после выхода из сценария пользователь также выходит из системы.
Это может быть не так элегантно, но это просто и работает.
источник
sudoers
файл на сервере, как это, - катастрофа, ожидающая своего появления. Если кто-то получает доступ от имени вашего пользователя (например, через веб-сервер), он может немедленно стать пользователем root. Спасибо, но я искал решения, которые не ставили бы мои настройки сервера в шансы. Если бы у вас было решение, которое каким-то волшебным образом повторно использует аутентификацию из SSH дляsudo
команды, я был бы более заинтересован (и, возможно, начал бы искать замены для SSH ...).Вы можете выполнить следующую команду получить root-доступ без интерактивности:
источник