Я пытаюсь запустить сценарий на удаленном сервере от имени пользователя root. У меня есть эта строка в моем сценарии оболочки.
cat /home/myuser/create_user_updated.sh | ssh myuser@$myip "sudo sh"
Я получаю следующую ошибку.
sudo: sorry, you must have a tty to run sudo
Скрипт create_user_updated.sh работает нормально, если скопировать файл на удаленный сервер и выполнить его там локально. Но не работает с удаленного сервера.
У вас есть два варианта:
Вы можете отключить требования tty с помощью sudo: run visudo
и либо удалите опцию "requiretty" глобально, если она установлена, либо для каждого пользователя:
Defaults:username !requiretty
Вы можете заставить ssh выделить псевдо-tty:
ssh -t -t myuser@$myip "sudo sh"
Обратите внимание на параметры двойного -t, они необходимы. Кроме того, вам нужно добавить exit
как последняя строчка вашего create_user_updated.sh
сценарий. В противном случае сеанс ssh может не завершиться должным образом (из-за принудительного создания псевдо-tty).
Используйте вариант №2, только если у вас нет прав root на целевой машине и вы не можете изменить конфигурацию sudo. №1 - гораздо более чистое решение. На мой взгляд, принудительное использование tty через sudo очень мало с точки зрения безопасности.
Использовать visudo
редактировать /etc/sudoers
файл и вставьте следующую строку:
Defaults:myuser !requiretty