Die normale Art, eine Verbindung zu einem SSH-Server herzustellen, ist ssh username@ip_address
. Ein Benutzer möchte jedoch möglicherweise nur ein Programm auf dem Remotecomputer ausführen. Der Programmname folgt also nach dem normalen Argument ssh username@ip_address <program_name>
. Zum Beispiel ssh username@ip_address ls
. Dieses Argument ist in Ordnung, mit Ausnahme interaktiver Programme (die auch Benutzereingaben akzeptieren und Ausgaben bereitstellen), z top
. Die Ausgabe ist
TERM-Umgebungsvariable nicht festgelegt.
Dies bedeutet, dass kein (Pseudo-) Terminal zwischen dem sshd- und dem top-Programm angeschlossen ist. Die Lösung besteht darin, ein Argument hinzuzufügen, -t
bei dem der gesamte Befehl jetzt wird ssh -t username@ip_address top
.
Meine Frage ist, warum sshd nicht standardmäßig auch ein Pseudo-Terminal für die Kommunikation mit nicht interaktiven Programmen verwenden kann, sodass das -t
Argument für interaktive Programme nicht hinzugefügt werden muss.
RequestTTY yes
(oderforce
).top
kann im Batch - Modus ausgeführt werden .Antworten:
Es ist wahr, dass PTYs, wie andere gesagt haben, einen gewissen Overhead haben - aber der Hauptgrund dafür, dass Sie beim Ausführen eines Remote-Befehls kein PTY verwenden, ist, dass Sie Informationen verlieren.
Wenn Sie einen Befehl remote über ssh ausführen, werden die Befehle
stdout
undstderr
Streams normalerweise an das lokalestdout
und gesendet. Diesstderr
bedeutet, dass Sie sie separat umleiten / weiterleiten können - zum Beispiel:Wenn Sie jedoch einen PTY verwenden, wird die gesamte Ausgabe an
stdout
gesendet, da PTYs keine separaten Streams für Ausgabe / Fehler haben:quelle
-t
dies die Standardeinstellung sein sollte und eine Option zum Deaktivieren erforderlich ist. Daher ist der geringfügige Leistungsvorteil für mich in Fällen, in denen dies keine Rolle spielt, am sinnvollsten.Handbuchseite für
ssh
beschreibt dies:Es ist ein Merkmal und wird wahrscheinlich durch historische
rsh
Verhaltensgründe verursacht. Es ist ziemlich vernünftig. Die meisten Befehle sind wirklich nicht interaktiv und es ist kein freier Betrieb, PTY zuzuweisen (was vor 20 Jahren wichtiger war).quelle
rsh
ist unklar, da dieses Programm keine entsprechende Option hat.rsh
, aber es gibt sicherlich einen gewissen Einfluss, nicht auf die Optionen, sondern auf das Verhalten vonrsh
undrlogin
(ob es einen Befehl gibt oder nicht). Sie können keinen interaktiven Befehl (wie rogue (6) oder vi (1)) mit rsh ausführen. Verwenden Sie stattdessen rlogin (1). .Wie soll
ssh
festgestellt werden, ob der von Ihnen aufgerufene Befehl interaktiv ist oder nicht?Dieser Albtraum wird noch schlimmer, wenn Sie feststellen, dass Sie sich möglicherweise bei einem Computer anmelden, auf dem ein Nicht-Unix-Betriebssystem ausgeführt wird.
Da es keine einfache Lösung gab, musste ein Fall der Standard sein.
quelle