SSH-Escapezeichen und Übertragung von Binärdateien
Ein Vorteil, der nicht in den anderen Antworten erwähnt worden ist , dass beim Betrieb ohne einen Pseudo-Terminal , die SSH - Escape - Zeichen , wie beispielsweise ~C
werden nicht unterstützt ; Dies macht es für Programme sicher, Binärdateien zu übertragen, die diese Sequenzen enthalten können.
Konzeptioneller Beweiß
Kopieren Sie eine Binärdatei mit einem Pseudoterminal:
$ ssh -t anthony@remote_host 'cat /usr/bin/free' > ~/free
Connection to remote_host closed.
Kopieren Sie eine Binärdatei ohne Verwendung eines Pseudoterminals:
$ ssh anthony@remote_host 'cat /usr/bin/free' > ~/free2
Die beiden Dateien sind nicht gleich:
$ diff ~/free*
Binary files /home/anthony/free and /home/anthony/free2 differ
Der mit einem Pseudoterminal kopierte ist beschädigt:
$ chmod +x ~/free*
$ ./free
Segmentation fault
während der andere nicht ist:
$ ./free2
total used free shared buffers cached
Mem: 2065496 1980876 84620 0 48264 1502444
-/+ buffers/cache: 430168 1635328
Swap: 4128760 112 4128648
Übertragen von Dateien über SSH
Dies ist besonders wichtig für Programme wie scp
oder rsync
den SSH verwendet für die Datenübertragung. In dieser detaillierten Beschreibung der Funktionsweise des SCP-Protokolls wird erläutert, wie das SCP-Protokoll aus einer Mischung aus Textprotokollnachrichten und Binärdateidaten besteht.
OpenSSH schützt Sie vor sich selbst
Es ist erwähnenswert, dass -t
der OpenSSH- ssh
Client die Zuweisung eines Pseudoterminals ablehnt, selbst wenn das Flag verwendet wird, wenn er feststellt, dass sein stdin
Stream kein Terminal ist:
$ echo testing | ssh -t anthony@remote_host 'echo $TERM'
Pseudo-terminal will not be allocated because stdin is not a terminal.
dumb
Sie können den OpenSSH-Client weiterhin zwingen, ein Pseudoterminal zuzuweisen mit -tt
:
$ echo testing | ssh -tt anthony@remote_host 'echo $TERM'
xterm
In beiden Fällen ist es (vernünftigerweise) egal, ob stdout
oder stderr
umgeleitet werden:
$ ssh -t anthony@remote_host 'echo $TERM' >| ssh_output
Connection to remote_host closed.