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 का उपयोग करें। एससीपी प्रोटोकॉल कैसे काम करता है इसका विस्तृत विवरण बताता है कि एससीपी प्रोटोकॉल में टेक्स्ट प्रोटोकॉल प्रोटोकॉल और बाइनरी फाइल डेटा का मिश्रण कैसे होता है।
ओपनएसएसएच आपको खुद से बचाने में मदद करता है
यह ध्यान देने योग्य है कि यदि -t
ध्वज का उपयोग किया जाता है, तो भी OpenSSH ssh
क्लाइंट एक छद्म-टर्मिनल आवंटित करने से इनकार कर देगा , यदि यह पता लगाता है कि इसकी 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.