SSH çıkış karakterleri ve ikili dosya aktarımı
Diğer yanıtlar söz edilmemiştir bir avantajı, işletim sırasında yani bir psödo-terminal olmadan , SSH çıkış karakterleri gibi ~C
edilir desteklenmez ; bu, programların bu dizileri içerebilecek ikili dosyaları aktarmasını güvenli kılar.
Kavramın ispatı
Bir sözde terminal kullanarak bir ikili dosya kopyalayın:
$ ssh -t anthony@remote_host 'cat /usr/bin/free' > ~/free
Connection to remote_host closed.
Sözde-terminal kullanmadan bir ikili dosyayı kopyala:
$ ssh anthony@remote_host 'cat /usr/bin/free' > ~/free2
İki dosya aynı değil:
$ diff ~/free*
Binary files /home/anthony/free and /home/anthony/free2 differ
Bir sözde terminal ile kopyalanan biri bozuk:
$ chmod +x ~/free*
$ ./free
Segmentation fault
diğeri değil:
$ ./free2
total used free shared buffers cached
Mem: 2065496 1980876 84620 0 48264 1502444
-/+ buffers/cache: 430168 1635328
Swap: 4128760 112 4128648
SSH üzerinden dosya aktarma
Bu gibi programlar için özellikle önemlidir scp
veya rsync
veri aktarımı için SSH kullanmak. SCP protokolünün nasıl çalıştığının bu ayrıntılı açıklaması, SCP protokolünün bir metinsel protokol mesajı ve ikili dosya verisi karışımından oluştuğunu açıklar.
OpenSSH sizi kendinizden korumanıza yardımcı olur
-t
Bayrak kullanılsa bile , OpenSSH ssh
istemcisinin, stdin
akışının bir terminal olmadığını tespit ederse sahte terminal tahsis etmeyi reddetmesi dikkat çekicidir :
$ echo testing | ssh -t anthony@remote_host 'echo $TERM'
Pseudo-terminal will not be allocated because stdin is not a terminal.
dumb
OpenSSH istemcisini, sözde bir terminali aşağıdakilerle ayırması için zorlayabilirsiniz -tt
:
$ echo testing | ssh -tt anthony@remote_host 'echo $TERM'
xterm
Her iki durumda da, bu (makul) eğer umursamıyor stdout
ya stderr
yönlendirildi şunlardır:
$ ssh -t anthony@remote_host 'echo $TERM' >| ssh_output
Connection to remote_host closed.