Я пытаюсь выполнить команду через SSH, как это в следующем документе:
ssh example.com <<END
sudo /etc/init.d/apache2 reload
END
Что обычно работает, за исключением случаев, когда я пытаюсь запустить что-то, что требует ввода, например, пароль для sudo. В этом случае я получаю следующее сообщение:
sudo: no tty present and no askpass program specified
Я знаю, что могу использовать -t
флаг SSH для выделения псевдотерминала, такого как этот:
ssh -t example.com "sudo /etc/init.d/apache2 reload"
И это сработает, но когда я попробую то же самое с здесь-документом, это не сработает, и я получу ту же ошибку об отсутствии tty:
ssh -t example.com <<END
sudo /etc/init.d/apache2 reload
END
Любая идея, как я могу сделать эту работу?
Кроме того, в случае, если вам интересно, почему я хочу, чтобы он работал с документом здесь, а не просто передавал его в одной строке, это потому, что входные команды (их может быть несколько) приходят из файла конфигурации, читаемого скриптом и я слышал, что это позволяет избежать проблем, связанных с использованием команд для кавычек, двойных кавычек и т. д.
Почему бы просто не сохранить документ здесь в переменной, которая будет указана
ssh -t
в качестве аргумента команды.На более общем замечании, используйте
ssh -T
или укажите удаленную оболочку в качестве аргумента команды, если stdin удаленного хоста перенаправляется из heredoc (чтобы предотвратитьssh
попытки выделить pty).источник