Giao thức SSH tạo một đường hầm an toàn thông qua đó bạn có thể chuyển một luồng hai chiều và bạn có thể sử dụng luồng đó để kết nối bất kỳ hai quy trình nào bạn muốn.
Hai quy trình quen thuộc nhất sẽ là shell (tại máy chủ) và trình giả lập thiết bị đầu cuối tương tác (tại máy khách). Đó là những gì bạn đang sử dụng khi bạn ssh đến một máy chủ và gõ các lệnh tại dấu nhắc của shell từ xa.
SCP là truyền tệp được thực hiện chỉ bằng cách sử dụng shell đó và một lệnh từ xa. Trong SCP, một khi máy khách được kết nối với máy chủ và tất cả xác thực và ủy quyền đã được thực hiện, máy khách sẽ gửi lệnh từ xa shell scp -f myfile.txt
, nó chỉ ghi nội dung của tệp myfile.txt vào luồng (cho máy khách để đọc) hoặc scp -t myfile.txt
đọc từ luồng và ghi vào myfile.txt.
Bạn sẽ nhận thấy rằng -f và -t (cho "từ" và "đến") không có trong các trang hướng dẫn của scp. Họ được coi là nội bộ. Có một lược đồ xác nhận nhẹ và một lược đồ để chuyển các thư mục bằng cách gói nội dung tệp trong các tiêu đề đơn giản. Nhưng đối với hầu hết các phần SCP là vấn đề cơ bản của việc ghi các byte của tệp vào đường hầm SSH, hãy để SSH xử lý các nội dung phức tạp như nén và toàn vẹn.
SFTP là một giao thức truyền tệp phức tạp hơn nhiều, một lần nữa được điều chỉnh thông qua SSH.
Trong SFTP, cả hai yêu cầu và phản hồi đều là các gói được mã hóa nhị phân với các tên như "SSH_FXP_OPEN", "SSH_FXP_STAT", "SSH_FXP_READ", "SSH_FXP_DATA", "SSH_FXP_CLOSE".
Một tính năng thú vị của giao thức là các lệnh có thể được sắp xếp theo thứ tự và các phản hồi có thể đến theo bất kỳ thứ tự nào. Điều này có thể có nghĩa là các phiên dành ít thời gian chờ đợi phản hồi hơn và có cơ hội tối ưu hóa chuyển đồng thời từ một máy chủ với nguồn dữ liệu có tốc độ khác nhau - mặc dù tôi không biết những cơ hội đó đã được thực hiện ở mức độ nào.
SFTP có các lệnh để thực hiện nhiều điều mà SCP không giải quyết; như xóa, đổi tên, cắt ngắn, di chuyển, v.v.
Tất cả các chi tiết có sẵn trong Dự thảo IETF .
Điều đáng chú ý là các gói SSH mới hơn thay thế scp
nhị phân người dùng bằng một liên kết tượng trưng đến nhị phân SFTP. SFTP này có giao diện của scp, nhưng dưới vỏ bọc nó sử dụng giao thức SFTP.
Trích dẫn - O'Reilly SSH: Secure Shell, Hướng dẫn dứt khoát , phần 5.7 "Hệ thống con":
CẢNH BÁO: Không xóa dòng sftp hệ thống con khỏi sshd2_config: cần thiết để scp2 và sftp hoạt động. Trong nội bộ, cả hai chương trình đều chạy ssh2 -s sftp để thực hiện chuyển tập tin.
Cá là một mảnh thú vị của lịch sử. Giả sử bạn muốn chuyển tệp qua SSH, nhưng hệ thống từ xa của bạn không có SCP. Hoặc có lẽ bạn muốn thực hiện các thao tác tệp tinh vi hơn SCP, nhưng hệ thống từ xa của bạn không có SFTP. Cả hai kịch bản đó đều không có khả năng xảy ra ngày hôm nay, nhưng khi Cá được phát minh, chúng đã được.
Vì vậy, các nhà phát triển của khách hàng Midnight Commander bắt đầu tạo ra giải pháp của riêng họ. Nó tương tự như scp về nguyên tắc, nhưng có nhiều lệnh hơn. Máy khách gửi các lệnh trông giống như:
#RETR /some/name
ls -l /some/name | ( read a b c d x e; echo $x ); echo '### 100'; cat /some/name; echo '### 200'
Nếu bạn đang nói chuyện với một máy chủ Fish, thì nó sẽ diễn giải #RETR
lệnh. Tuy nhiên, nếu máy chủ từ xa không cài đặt máy chủ Fish, các lệnh sẽ được giải thích bởi trình bao. Đầu tiên là một bình luận, sau đó là một lệnh in thông tin về tệp, tiếp theo là nội dung tệp được bao quanh trong một số điểm đánh dấu.
Thực tế, trong trường hợp không có scp hoặc cá, khách hàng đã "tự lăn" tương đương với scp - nhưng nó cũng có thể gửi các lệnh shell để đổi tên, di chuyển, cắt bớt, v.v.
Chi tiết về Cá có trong nguồn Chỉ huy nửa đêm tại đây .
Tất cả điều này có nghĩa gì từ góc độ người dùng cuối?
- triển khai máy chủ SSH cũ hơn hỗ trợ scp nhưng không phải SFTP; bạn không thể sử dụng máy khách SFTP với những
- Sử dụng SFTP cho hiệu suất, độ tin cậy và tính linh hoạt
- Máy khách "scp" của bạn có thể là máy khách SFTP được ngụy trang ( Cần dẫn nguồn )
- Cá có thể hữu ích trong các trường hợp thích hợp, nhưng nếu không thì sử dụng SFTP tiêu chuẩn hơn.