SSH melepaskan karakter dan mentransfer file biner
Salah satu keuntungan yang belum disebutkan dalam jawaban yang lain adalah bahwa ketika beroperasi tanpa pseudo-terminal , SSH yang melarikan diri karakter seperti ~C
yang tidak didukung ; ini membuatnya aman bagi program untuk mentransfer file biner yang mungkin mengandung urutan ini.
Bukti dari konsep
Salin file biner menggunakan terminal semu:
$ ssh -t anthony@remote_host 'cat /usr/bin/free' > ~/free
Connection to remote_host closed.
Salin file biner tanpa menggunakan pseudo-terminal:
$ ssh anthony@remote_host 'cat /usr/bin/free' > ~/free2
Kedua file tidak sama:
$ diff ~/free*
Binary files /home/anthony/free and /home/anthony/free2 differ
Yang disalin dengan terminal semu rusak:
$ chmod +x ~/free*
$ ./free
Segmentation fault
sementara yang lain tidak:
$ ./free2
total used free shared buffers cached
Mem: 2065496 1980876 84620 0 48264 1502444
-/+ buffers/cache: 430168 1635328
Swap: 4128760 112 4128648
Mentransfer file melalui SSH
Ini sangat penting untuk program seperti scp
atau rsync
yang menggunakan SSH untuk transfer data. Ini penjelasan rinci tentang bagaimana protokol SCP bekerja menjelaskan bagaimana protokol SCP terdiri dari campuran pesan protokol tekstual dan data file biner.
OpenSSH membantu melindungi Anda dari diri sendiri
Perlu dicatat bahwa meskipun -t
flag digunakan, ssh
klien OpenSSH akan menolak untuk mengalokasikan pseudo-terminal jika mendeteksi bahwa stdin
alirannya bukan terminal:
$ echo testing | ssh -t anthony@remote_host 'echo $TERM'
Pseudo-terminal will not be allocated because stdin is not a terminal.
dumb
Anda masih dapat memaksa klien OpenSSH untuk mengalokasikan pseudo-terminal dengan -tt
:
$ echo testing | ssh -tt anthony@remote_host 'echo $TERM'
xterm
Dalam kedua kasus, itu (masuk akal) tidak peduli jika stdout
atau stderr
diarahkan:
$ ssh -t anthony@remote_host 'echo $TERM' >| ssh_output
Connection to remote_host closed.