Назад | Перейти на главную страницу

запустить скрипт на удаленном сервере

Я пытаюсь запустить сценарий на удаленном сервере от имени пользователя 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 работает нормально, если скопировать файл на удаленный сервер и выполнить его там локально. Но не работает с удаленного сервера.

У вас есть два варианта:

  1. Вы можете отключить требования tty с помощью sudo: run visudo и либо удалите опцию "requiretty" глобально, если она установлена, либо для каждого пользователя:

    Defaults:username !requiretty

  2. Вы можете заставить 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