SSH thoát ký tự và chuyển các tệp nhị phân
Một lợi thế mà chưa được đề cập trong câu trả lời khác là khi hoạt động mà không có một giả thiết bị đầu cuối , SSH thoát khỏi nhân vật như ~C
đang không được hỗ trợ ; điều này giúp các chương trình chuyển các tệp nhị phân có thể chứa các chuỗi này trở nên an toàn.
Bằng chứng của khái niệm
Sao chép tệp nhị phân bằng thiết bị đầu cuối giả:
$ ssh -t anthony@remote_host 'cat /usr/bin/free' > ~/free
Connection to remote_host closed.
Sao chép tệp nhị phân mà không sử dụng thiết bị đầu cuối giả:
$ ssh anthony@remote_host 'cat /usr/bin/free' > ~/free2
Hai tệp không giống nhau:
$ diff ~/free*
Binary files /home/anthony/free and /home/anthony/free2 differ
Cái được sao chép bằng thiết bị đầu cuối giả bị hỏng:
$ chmod +x ~/free*
$ ./free
Segmentation fault
trong khi cái khác thì không:
$ ./free2
total used free shared buffers cached
Mem: 2065496 1980876 84620 0 48264 1502444
-/+ buffers/cache: 430168 1635328
Swap: 4128760 112 4128648
Truyền tệp qua SSH
Điều này đặc biệt quan trọng đối với các chương trình như scp
hoặc rsync
sử dụng SSH để truyền dữ liệu. Đây mô tả chi tiết về cách thức giao thức SCP việc giải thích cách các giao thức SCP bao gồm một hỗn hợp của các thông điệp giao thức văn bản và dữ liệu tập tin nhị phân.
OpenSSH giúp bảo vệ bạn khỏi chính bạn
Điều đáng chú ý là ngay cả khi -t
cờ được sử dụng, ssh
ứng dụng khách OpenSSH sẽ từ chối phân bổ thiết bị đầu cuối giả nếu phát hiện ra rằng stdin
luồng của nó không phải là thiết bị đầu cuối:
$ echo testing | ssh -t anthony@remote_host 'echo $TERM'
Pseudo-terminal will not be allocated because stdin is not a terminal.
dumb
Bạn vẫn có thể buộc ứng dụng khách OpenSSH phân bổ thiết bị đầu cuối giả với -tt
:
$ echo testing | ssh -tt anthony@remote_host 'echo $TERM'
xterm
Trong cả hai trường hợp, nó (một cách hợp lý) không quan tâm nếu stdout
hoặc stderr
được chuyển hướng:
$ ssh -t anthony@remote_host 'echo $TERM' >| ssh_output
Connection to remote_host closed.