
Ich wollte einen Befehl in einer Remote-Shell in ihrer interaktiven Umgebung ausführen, damit mein Remote .bash_profile
dort zuerst geladen wird, bevor der Befehl ausgeführt wird.
Das funktioniert super:
echo "command" | ssh user@remote_host
[1]
Aber es gibt einen Fehler
Es wird kein Pseudoterminal zugewiesen, da stdin kein Terminal ist.
Ich weiß nicht, ob das ein Problem ist, da der obige Befehl für meinen Zweck gut funktioniert, aber ich habe trotzdem nach einer Lösung gesucht, um das Problem zu beheben, und ich habe gefunden
ssh -t -t
[2]
Durch die Kombination erhalten Sie echo "command" | ssh -tt user@remote_host
etwas, das hervorragend funktioniert.
Aber aus irgendeinem seltsamen Grund kann ich bei Git Bash nach der Rückkehr von der Ausführung des Befehls nichts mehr eingeben. Ich habe es bei Cygwin getestet, wo es großartig funktioniert, also ist es nur bei Git Bash, das dieses Problem hat.
Ich habe versucht, es einzugeben, exit
für den Fall, dass es immer noch unsichtbar in dieser Remote-Shell feststeckt, aber nichts funktioniert.
ssh -tt
Irgendwelche Ideen, was das Problem bei der Ausführung auf Git Bash sein könnte ?
Antwort1
Die Meldung „Pseudoterminal wird nicht zugewiesen“ dient nur zu Informationszwecken. Wenn der von Ihnen ausgeführte Befehl kein Terminal benötigt, sollten Sie besser ssh mit der -T
Option ausführen, die PTY-Zuweisung zu deaktivieren und die Meldung zu ignorieren.
Es klingt, als ob Ihr lokales TTY aus irgendeinem Grund in einem seltsamen Zustand verbleibt. Durch Ausführen stty sane
sollte das Terminal in einen nutzbaren Zustand zurückgesetzt werden. Ich weiß, Sie sagten, Sie könnten nicht tippen, aber Sie könnten Folgendes versuchen:
- Drücken Sie Strg-Q (halten Sie also die Strg-Taste gedrückt und drücken Sie „Q“), um eine eventuell aktive Strg-S/Strg-Q-Pause aufzuheben.
- Geben Sie Strg-J ein. Dies ist ein wörtliches Newline-Zeichen, um sicherzustellen, dass die Shell bereit ist, eine neue Befehlszeile zu lesen.
- Geben Sie „stty sane“ ein und drücken Sie dann erneut Strg+J. Versuchen Sie es, auch wenn das, was Sie eingeben, nicht auf dem Bildschirm erscheint.
Wenn das nicht funktioniert, besteht die einzige Lösung darin, auf dem festgefahrenen TTY von einem anderen Terminal aus „stty sane“ auszuführen.
- Öffnen Sie ein weiteres Terminalfenster.
- Verwenden Sie „ps“, um herauszufinden, auf welchem PTY die feststeckende Sitzung liegt.
- Wird
stty sane
mit vom PTY umgeleiteter Eingabe ausgeführt.
Beispielsweise unter Linux:
$ ps -fu jdoe
...
jdoe 2083 2080 0 22:17 pts/0 00:00:00 /bin/bash <-- TTY is "/dev/pts/0"
$ stty sane < /dev/pts/0