it-swarm-vi.com

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

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 để làm đ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ì?

67
Ivan

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à chưa có giao thức khác có thể sử dụng SSH hoặc RSH để truyền tệp.

63
jsbillings

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õ lệnh tại Prompt của Shell từ xa.

[~ # ~] scp [~ # ~] là việc truyền tệp được thực hiện chỉ bằng Shell đó và một lệnh từ xa. Trong SCP, 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 cho Shell từ xa một lệnh như scp -f myfile.txt, chỉ ghi nội dung của tệp myfile.txt vào luồng (để 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 một Dự thảo IETF .

Điều đáng chú ý là các gói SSH mới hơn thay thế người dùng nhị phân scp 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: Shell an toàn, 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 phần 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 thiết lập về việc tạo 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áy chủ Fish, thì nó sẽ diễn giải #RETR chỉ huy. 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 Shell giải thích. Đầ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á nằm 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
  • Ứng dụng khách "scp" của bạn có thể là ứng dụng 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.
34
slim

Đặ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) 
21
c2h2

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

11
N J