Ich versuche, einen Befehl über SSH wie folgt in einem Here-Dokument auszuführen:
ssh example.com <<END
sudo /etc/init.d/apache2 reload
END
Was normalerweise funktioniert, außer wenn ich versuche, etwas auszuführen, das eingegeben werden muss, wie z. B. das Passwort für sudo. In diesem Fall erhalte ich folgende Meldung:
sudo: no tty present and no askpass program specified
Ich weiß, dass ich das -t
Flag auf SSH verwenden kann, um eine Pseudo-Tty wie diese zuzuweisen:
ssh -t example.com "sudo /etc/init.d/apache2 reload"
Und es wird funktionieren, aber wenn ich dasselbe mit here-document versuche, funktioniert es nicht und ich erhalte den gleichen Fehler, wenn kein tty vorhanden ist:
ssh -t example.com <<END
sudo /etc/init.d/apache2 reload
END
Irgendeine Idee, wie ich diese Arbeit machen kann?
Falls Sie sich fragen, warum ich möchte, dass es mit dem Here-Dokument funktioniert, anstatt es nur in derselben Zeile zu übergeben, liegt dies daran, dass die Eingabebefehle (es kann einige geben) aus einer Konfigurationsdatei stammen, die von einem Skript gelesen wird und ich habe gehört, dass es die Mühe vermeidet, den Befehlen für Anführungszeichen, doppelte Anführungszeichen usw. zu entkommen.
Speichern Sie das Dokument hier einfach in einer Variablen, die
ssh -t
als Befehlsargument angegeben wird.Verwenden Sie im Allgemeinen
ssh -T
die Remote-Shell als Befehlsargument , oder geben Sie sie an, wenn der Standard des Remote-Hosts von einem Heredoc umgeleitet wird (um zu verhindern, dassssh
versucht wird, eine Pty zuzuweisen).quelle