Символи втечі SSH та передача бінарних файлів
Одним з переваг , які були згадані в інших відповідях є те , що при роботі без псевдо-терміналу , то SSH уникнути символів , такі як ~C
є не підтримує ; це забезпечує безпеку програм для передачі бінарних файлів, які можуть містити ці послідовності.
Доказ концепції
Скопіюйте двійковий файл за допомогою псевдотерміналу:
$ ssh -t anthony@remote_host 'cat /usr/bin/free' > ~/free
Connection to remote_host closed.
Скопіюйте двійковий файл без використання псевдотерміналу:
$ ssh anthony@remote_host 'cat /usr/bin/free' > ~/free2
Два файли не однакові:
$ diff ~/free*
Binary files /home/anthony/free and /home/anthony/free2 differ
Той, який був скопійований псевдотерміналом, пошкоджений:
$ chmod +x ~/free*
$ ./free
Segmentation fault
а інший не:
$ ./free2
total used free shared buffers cached
Mem: 2065496 1980876 84620 0 48264 1502444
-/+ buffers/cache: 430168 1635328
Swap: 4128760 112 4128648
Передача файлів через SSH
Це особливо важливо для таких програм, як scp
або rsync
які використовують SSH для передачі даних. Цей детальний опис того, як працює протокол SCP, пояснює, як протокол SCP складається з суміші текстових протокольних повідомлень та даних бінарних файлів.
OpenSSH допомагає захистити вас від себе
Варто зазначити, що навіть якщо -t
прапор використовується, ssh
клієнт OpenSSH відмовиться виділяти псевдотермінал, якщо виявить, що його stdin
потік не є терміналом:
$ echo testing | ssh -t anthony@remote_host 'echo $TERM'
Pseudo-terminal will not be allocated because stdin is not a terminal.
dumb
Ви все ще можете змусити клієнта OpenSSH виділити псевдотермінал за допомогою -tt
:
$ echo testing | ssh -tt anthony@remote_host 'echo $TERM'
xterm
У будь-якому випадку, він (розумно) не хвилює , якщо stdout
або stderr
перенаправляються:
$ ssh -t anthony@remote_host 'echo $TERM' >| ssh_output
Connection to remote_host closed.