Was ist der Zweck eines Pseudo-Tty?


Beste Antwort

Das Ausführen von Programmen auf einem Terminal bietet Ihnen zusätzliche Funktionen, die beim Ausführen von Programmen als Stapeljobs nicht vorhanden sind Wenn Sie beispielsweise einen Prozess auf dem Terminal ausführen, können Sie ihn durch Drücken von Strg + C unterbrechen. Wenn ein Prozess jedoch keinem Terminal zugeordnet ist, können Sie ihn nicht mit Strg + C unterbrechen, sondern wahrscheinlich kill oder so etwas ausführen. Terminals werden in dieser Antwort ausführlicher erläutert.

Der Remote-Prozess sshd verwendet ein Pseudo-Terminal-Paar, um die Rolle einer Tastatur und eines Bildschirms zu übernehmen. Wenn der Remote-Prozess von einem „echten“ Terminal wie /dev/tty1 lesen würde, würde er seine Eingabe direkt von der Tastatur erhalten. Stattdessen übergibt der Prozess sshd Ihre Tastenanschläge an den Remote-Prozess, indem er sie an das Master-Ende des Pseudo-Terminals schreibt. Das Programm, das Sie ausführen, empfängt dann Daten am Slave-Ende des Pseudo-Terminals, als ob sie von der Tastatur kommen würden. Wenn der Prozess auf das Slave-Ende des Pseudo-Terminals schreibt, hat er ebenfalls die Illusion, dass dies der Fall ist „s Schreiben an ein“ wahres „Terminal, das Zeichen auf einem Bildschirm drucken würde. Stattdessen liest sshd die am Master-Ende geschriebenen Daten, verschlüsselt sie und sendet sie über das Kabel an Sie zurück.

Um zu sehen, was ohne Terminal passiert Versuchen Sie, etwas wie ssh -T remote.host auszuführen. Die Shell wird auf dem Remote-Host gestartet, aber die Shell muss keine Eingabeaufforderung ausdrucken, da sie kein Terminal hat und daher denkt, dass sie im Batch-Modus ausgeführt wird. Sie können sudo auch nicht auf dem Remote-Host ausführen, da sudo die Eingabe des Kennworts auf einem Terminal anstelle des Lesens erfordert Dies erfolgt über die Standardeingabe.

Standardmäßig weist die Remote-Datei sshd nur dann eine Pty zu, wenn Sie keinen Befehl angeben. Wenn Sie ssh remote.host screen versuchen, werden Sie feststellen, dass die Angabe des Befehls die pty-Zuordnung unterdrückt und Sie erneut in Schwierigkeiten geraten. Um dies zu vermeiden, geben Sie die Option -t an. Anschließend versucht die Remote-Option sshd immer, ein Terminal zuzuweisen.

… es sei denn, auf lokaler Ebene gibt es kein Terminal, mit dem gesprochen werden kann, z. B. wenn ssh aus einer Datei liest. In diesem Fall können Sie die -Pty-Zuweisung erzwingen, indem Sie ssh -t -t verwenden. Dies kann einige unbeabsichtigte Auswirkungen haben, da das Remote-Ende auf jedes Byte reagiert, das in die Standardeingabe von ssh geschrieben wird, als ob es über die Tastatur eingegeben worden wäre. Beispiel: Strg + C um Die Tastatur erzeugt den ASCII-Code 3. Wenn also das lokale ssh zufällig ein Byte mit dem Wert 3 aus seiner Eingabedatei liest, wird dieses an den Remote-Host, den, weitergegeben remote sshd schreibt es an das Master-Ende des Pty, und der Kernel sendet SIGINT an den Prozess, der vom Slave-Ende liest. Terminals sind interessante Kreaturen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.