Was ist der Unterschied zwischen den Protokollen SFTP, SCP und FISH?

59

Früher dachte ich, SCP sei ein Tool zum Kopieren von Dateien über SSH, und das Kopieren von Dateien über SSH heißt SFTP, was selbst ein Synonym für FISH ist.

Als ich nun nach einem Total Commander-Plugin suchte, um dies in Windows zu tun, habe ich festgestellt, dass auf der Seite "Ermöglicht den Zugriff auf Remote-Server über sicheres FTP (FTP über SSH). Erfordert SSH2. Dies ist NICHT dasselbe." als SCP! "

Wenn es nicht dasselbe ist, was missverstehe ich dann?

Ivan
quelle
5
Dies ist eine Erweiterung einer früheren Frage . (@Ivan: Es wäre hilfreich gewesen, dies zu erwähnen.)
Gilles 'SO - hör auf, böse zu sein'

Antworten:

57

SFTP ist nicht das FTP-Protokoll über ssh, sondern eine Erweiterung des in SSH2 (und einigen SSH1-Implementierungen) enthaltenen SSH-Protokolls. SFTP ist ein Dateiübertragungsprotokoll, das FTP ähnelt, jedoch das SSH-Protokoll als Netzwerkprotokoll verwendet (und davon profitiert, dass SSH für die Authentifizierung und Verschlüsselung übrig bleibt).

SCP dient nur zum Übertragen von Dateien und kann keine anderen Aufgaben wie das Auflisten von Remote-Verzeichnissen oder das Entfernen von Dateien ausführen, wie dies bei SFTP der Fall ist.

FISH scheint ein weiteres Protokoll zu sein , das entweder SSH oder RSH zum Übertragen von Dateien verwenden kann.

jsbillings
quelle
11
Es gibt auch FTPS, FTP über TLS.
Mikemaccana
3
@mikemaccana Sie können dann FTPES hinzufügen, wobei die Möglichkeit besteht, FTP explizit über eine reguläre FTP-Verbindung zu verwenden
Kiwy
26

Das SSH-Protokoll erstellt einen sicheren Tunnel, durch den Sie einen bidirektionalen Stream übertragen können. Mit diesem Stream können Sie zwei beliebige Prozesse verbinden.

Die bekanntesten zwei Prozesse wären eine Shell (auf dem Server) und ein interaktiver Terminalemulator (auf dem Client). Das ist es, was Sie verwenden, wenn Sie an einen Server senden und Befehle an der Eingabeaufforderung der Remote-Shell eingeben.

SCP ist eine Dateiübertragung, bei der nur diese Shell und ein Remote-Befehl verwendet werden. In SCP sendet der Client, sobald der Client mit dem Server verbunden ist und die Authentifizierung und Autorisierung abgeschlossen ist, einen Befehl an die Remote-Shell scp -f myfile.txt, der lediglich den Inhalt der Datei myfile.txt in den Stream (für den Client) schreibt lesen) oder scp -t myfile.txtwelche liest aus dem Stream und schreibt in myfile.txt.

Sie werden feststellen, dass -f und -t (für "von" und "bis") nicht in den scp-Manpages enthalten sind. Sie gelten als intern. Es gibt ein einfaches Bestätigungsschema und ein Schema zum Übertragen von Verzeichnissen, indem der Dateiinhalt in einfache Header eingeschlossen wird. Zum größten Teil ist SCP jedoch eine grundlegende Aufgabe, die Bytes der Datei in den SSH-Tunnel zu schreiben, sodass SSH mit komplizierten Dingen wie Komprimierung und Integrität umgehen kann.

SFTP ist ein viel komplexeres Dateiübertragungsprotokoll, das wiederum über SSH getunnelt wird.

In SFTP sind sowohl Anforderungen als auch Antworten binär codierte Pakete mit Namen wie "SSH_FXP_OPEN", "SSH_FXP_STAT", "SSH_FXP_READ", "SSH_FXP_DATA", "SSH_FXP_CLOSE".

Ein interessantes Merkmal des Protokolls ist, dass Befehle per Pipeline übertragen werden können und die Antworten in beliebiger Reihenfolge eingehen können. Dies kann bedeuten, dass Sitzungen weniger Zeit für Antworten aufwenden müssen, und es gibt Möglichkeiten, gleichzeitige Übertragungen von einem Server mit Datenquellen unterschiedlicher Geschwindigkeit zu optimieren - obwohl ich nicht weiß, inwieweit diese Möglichkeiten genutzt wurden.

SFTP verfügt über Befehle, um viele Dinge zu tun, die SCP nicht anspricht. wie löschen, umbenennen, abschneiden, verschieben usw.

Alle Details sind in einem IETF-Entwurf enthalten .

Es ist erwähnenswert, dass neuere SSH-Pakete die Benutzer- scpBinärdatei durch einen Symlink zur SFTP-Binärdatei ersetzen . Dieses SFTP hat das Aussehen und Verhalten von scp, verwendet jedoch das SFTP-Protokoll.

Zitat - O'Reilly SSH: Die sichere Shell, das endgültige Handbuch , Abschnitt 5.7 "Subsysteme":

WARNUNG: Entfernen Sie nicht die Subsystem-SFTP-Zeile aus "sshd2_config". Sie ist erforderlich, damit "scp2" und "sftp" funktionieren. Intern führen beide Programme ssh2 -s sftp aus, um Dateiübertragungen durchzuführen.

Fisch ist ein interessantes Stück Geschichte. Angenommen, Sie möchten Dateien über SSH übertragen, Ihr Remote-System verfügt jedoch nicht über SCP. Oder Sie möchten komplexere Dateivorgänge als SCP ausführen, Ihr Remote-System verfügt jedoch nicht über SFTP. Keines dieser Szenarien ist heute wahrscheinlich, aber als Fish erfunden wurde, waren sie es.

Die Entwickler des Clients Midnight Commander haben sich also daran gemacht, eine eigene Lösung zu entwickeln. Es ist im Prinzip ähnlich wie scp, aber es gibt mehr Befehle. Der Client sendet Befehle, die wie folgt aussehen:

 #RETR /some/name
 ls -l /some/name | ( read a b c d x e; echo $x ); echo '### 100'; cat /some/name; echo '### 200'

Wenn Sie mit einem Fish-Server sprechen, wird der #RETRBefehl interpretiert . Wenn auf dem Remote-Server jedoch kein Fish-Server installiert ist, werden die Befehle von der Shell interpretiert. Zuerst ein Kommentar, dann ein Befehl, der Informationen über die Datei ausgibt, gefolgt vom Dateiinhalt, der von einigen Markierungen umgeben ist.

In Abwesenheit von scp oder fish hat der Client sein eigenes scp-Äquivalent "gerollt" - er kann jedoch auch Shell-Befehle zum Umbenennen, Verschieben, Abschneiden usw. senden.

Einzelheiten zu Fisch finden Sie in der Midnight Commander-Quelle hier .

Was bedeutet das alles aus Sicht des Endbenutzers?

  • Ältere SSH-Serverimplementierungen unterstützen scp, jedoch nicht SFTP. Sie können mit diesen keinen SFTP-Client verwenden
  • Nutzen Sie SFTP für Leistung, Zuverlässigkeit und Flexibilität
  • Ihr "scp" -Client ist möglicherweise ein getarnter SFTP-Client ( Angabe erforderlich )
  • Fisch kann unter Nischenbedingungen nützlich sein, verwendet jedoch ansonsten das üblichere SFTP.
schlank
quelle
20

Einfach ausgedrückt:

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) 
c2h2
quelle
1
Aber sftpund scperfordert spezielle Programme auf der Serverseite, im Gegensatz zu FISH, das nur grundlegende Unix-Dienstprogramme in der Remote-Shell verwendet.
imz - Ivan Zakharyaschev
Laut der Beschreibung von FISH ist ein bemerkenswertes Merkmal von FISH, dass es auf der entfernten Seite nichts Besonderes erfordert (kein Serverprogramm, wie scpfür scp oder sftp-server). Und in der Tat gibt es Fälle, in denen es sich bei der Remote-Seite um ein "eingeschränktes" Unix handelt, bei dem Sie nicht installieren können, was Sie möchten: Um Dateien über SSH (über WLAN) auf Android zu übertragen, habe ich die Skripte von rpush-cat geschrieben - Vielleicht würde ein FISH-Client funktionieren. ( tramp-fish.elIn Emacs war dies auch möglich: Der reguläre TRAMP-Client funktionierte nicht, da er statnicht auf Android verfügbar war.)
imz - Ivan Zakharyaschev
2
Könnten Sie erläutern, inwiefern scpneben der Client-Seite auch die Server-Seite benötigt wird? Bei einer schnellen Google-Suche konnte ich nichts finden, was bestätigt, dass dies scpauch auf der Serverseite erforderlich ist.
Johannes Bittner
11

FISH und SFTP ähneln sich, und wie beobachtet, funktionieren beide über SSH. SFTP erfordert spezielle Unterstützung und Konfiguration auf dem SSH-Server, um die Übertragung zu erleichtern, ist jedoch etwas sicherer und ermöglicht SysAdmins, nur SFTP zuzulassen (in diesen Situationen hat FISH gewonnen) nicht funktionieren).

FISH benötigt zum Kopieren eine Shell (z. B. sh / rsh) und erfordert daher vollständigen SSH-Zugriff auf die Maschine. Ich würde mir vorstellen, dass es schwieriger ist, diese zu sichern (ich kann dies nicht objektiv kommentieren, da ich es nie musste).

Nach Möglichkeit würde ich SFTP, scp, FISH (in dieser Reihenfolge) empfehlen.

Wikipedia FISH Artikel

NJ
quelle
Laut der verlinkten Beschreibung ist ein bemerkenswertes Merkmal von FISH, dass es auf der Remote-Seite nichts Besonderes erfordert (kein Serverprogramm, wie scpfür SCP oder SFTP-Server). Und in der Tat gibt es Fälle, in denen es sich bei der Remote-Seite um ein "eingeschränktes" Unix handelt, bei dem Sie nicht installieren können, was Sie möchten: Um Dateien über SSH (über WLAN) auf Android zu übertragen, habe ich die Skripte von rpush-cat geschrieben - Vielleicht würde ein FISH-Client funktionieren. ( tramp-fish.elIn Emacs war dies auch möglich: Der reguläre TRAMP-Client funktionierte nicht, da er statnicht auf Android verfügbar war.)
imz - Ivan Zakharyaschev