Próbuję uruchomić komendę SSH w następujący sposób w dokumencie tutaj:
ssh example.com <<END
sudo /etc/init.d/apache2 reload
END
Co normalnie działa, z wyjątkiem sytuacji, gdy próbuję uruchomić coś, co wymaga wprowadzenia, na przykład hasło do sudo. W takim przypadku otrzymuję następujący komunikat:
sudo: no tty present and no askpass program specified
Wiem, że mogę użyć -t
flagi w SSH, aby przydzielić pseudo-tty, takie jak to:
ssh -t example.com "sudo /etc/init.d/apache2 reload"
I to zadziała, ale kiedy spróbuję tego samego z dokumentem tutaj, to nie działa i otrzymam ten sam błąd o braku obecności tty:
ssh -t example.com <<END
sudo /etc/init.d/apache2 reload
END
Masz pomysł, jak sprawić, by to działało?
Ponadto, jeśli zastanawiasz się, dlaczego chcę, aby działał z niniejszym dokumentem zamiast po prostu przekazywać go w tym samym wierszu, dzieje się tak, ponieważ polecenia wejściowe (może być kilka) pochodzą z pliku konfiguracyjnego odczytanego przez skrypt i słyszałem, że unika się kłopotów z unikaniem poleceń dla cudzysłowów, podwójnych cudzysłowów itp.
Dlaczego nie po prostu zapisać tutaj dokument w zmiennej, która zostanie podana
ssh -t
jako argument polecenia.Mówiąc bardziej ogólnie, użyj
ssh -T
lub określ zdalną powłokę jako argument polecenia, jeśli stdin zdalnego hosta jest przekierowywany z heredoc (aby zapobiecssh
próbie alokacji pty).źródło