Sự khác biệt giữa các giao thức SFTP, SCP và FISH là gì?


59

Tôi đã từng nghĩ SCP là một công cụ để sao chép các tệp qua SSH và sao chép các tệp qua SSH được gọi là SFTP, bản thân nó là một từ đồng nghĩa với FISH.

Nhưng bây giờ khi tôi đang tìm kiếm một plugin Total Commander để thực hiện điều này trong Windows, tôi nhận thấy rằng trên trang của nó có ghi "Cho phép truy cập vào các máy chủ từ xa thông qua FTP an toàn (FTP qua SSH). Yêu cầu SSH2. như SCP! ".

Nếu nó không giống nhau thì tôi đang hiểu lầm điều gì?


5
Đây là một phần mở rộng của một câu hỏi trước . (@Ivan: sẽ rất hữu ích khi đề cập đến vấn đề này.)
Gilles 'SO- ngừng trở nên xấu xa'

Câu trả lời:


57

SFTP không phải là giao thức FTP qua ssh, mà là một phần mở rộng cho giao thức SSH có trong SSH2 (và một số triển khai SSH1). SFTP là một giao thức truyền tệp tương tự như FTP nhưng sử dụng giao thức SSH làm giao thức mạng (và lợi ích từ việc rời khỏi SSH để xử lý xác thực và mã hóa).

SCP chỉ dành cho việc truyền tệp và không thể thực hiện những việc khác như liệt kê các thư mục từ xa hoặc xóa tệp mà SFTP thực hiện.

FISH dường như là một giao thức khác có thể sử dụng SSH hoặc RSH để truyền tệp.


11
Đáng nói hơn: còn có FTPS, đó là FTP trên TLS.
mikemaccana

3
@mikemaccana sau đó bạn có thể thêm phù thủy FTPES là khả năng sử dụng ftps một cách rõ ràng qua kết nối ftp thông thường
Kiwy

26

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ế scpnhị 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.

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 #RETRlệ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.

20

Đặt nó đơn giản:

SFTP = SSH + SFTP-server on server
SCP  = SSH + `scp` on server side
FISH = SSH + `dd` (and some other basic Unix utilities on the server side only) 

1
Nhưng sftpscpyêu cầu các chương trình đặc biệt ở phía máy chủ, không giống như FISH, chỉ sử dụng các khả năng cơ bản của Unix trong vỏ từ xa.
imz - Ivan Zakharyaschev

Theo mô tả của FISH, một tính năng đáng chú ý của FISH là nó không yêu cầu điều gì đặc biệt ở phía xa (không có chương trình máy chủ, như scpđối với scp hoặc sftp-server). Và có trường hợp đang thực sự khi phía xa là một "hạn chế" Unix, nơi bạn không thể cài đặt những gì bạn muốn: để chuyển tập tin vào Android thông qua SSH (qua WiFi), tôi đã viết bộ RPUSH-mèo script - có lẽ, một khách hàng CÁ sẽ làm việc. ( tramp-fish.eltrong Emacs cũng có thể: ứng dụng TRAMP thông thường không hoạt động vì statkhông có trên Android.)
imz - Ivan Zakharyaschev

2
Bạn có thể giải thích về cách thức scpcũng cần thiết ở phía máy chủ, ngoài phía máy khách không? Với một tìm kiếm nhanh trên google, tôi không thể tìm thấy bất cứ điều gì xác nhận scpcũng cần thiết ở phía máy chủ.
Julian Bittner

11

FISH và SFTP tương tự nhau và như đã thấy, cả hai đều hoạt động trên SSH, SFTP yêu cầu hỗ trợ và cấu hình cụ thể trong Máy chủ SSH để tạo điều kiện cho việc chuyển, nhưng nó an toàn hơn một chút và cho phép SysAdmins chỉ cho phép SFTP (trong những tình huống này FISH đã thắng 't làm việc).

FISH yêu cầu shell (ví dụ sh / rsh) để sao chép và do đó yêu cầu quyền truy cập SSH đầy đủ vào máy, tôi sẽ tưởng tượng sẽ khó bảo mật hơn (tôi không thể nhận xét khách quan về điều này vì tôi chưa bao giờ phải làm thế).

Nếu có thể, tôi muốn giới thiệu SFTP, scp, FISH (theo thứ tự đó).

Bài viết CÁ Wikipedia


Theo mô tả được liên kết, một tính năng đáng chú ý của FISH là nó không yêu cầu điều gì đặc biệt ở phía xa (không có chương trình máy chủ, như scpđối với máy chủ scp hoặc sftp). Và có trường hợp đang thực sự khi phía xa là một "hạn chế" Unix, nơi bạn không thể cài đặt những gì bạn muốn: để chuyển tập tin vào Android thông qua SSH (qua WiFi), tôi đã viết bộ RPUSH-mèo script - có lẽ, một khách hàng CÁ sẽ làm việc. ( tramp-fish.eltrong Emacs cũng có thể: ứng dụng TRAMP thông thường không hoạt động vì statkhông có trên Android.)
imz - Ivan Zakharyaschev
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.