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?
ssh
scp
sftp
fish-protocol
Ivan
quelle
quelle
Antworten:
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.
quelle
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) oderscp -t myfile.txt
welche 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-
scp
Binärdatei durch einen Symlink zur SFTP-Binärdatei ersetzen . Dieses SFTP hat das Aussehen und Verhalten von scp, verwendet jedoch das SFTP-Protokoll.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:
Wenn Sie mit einem Fish-Server sprechen, wird der
#RETR
Befehl 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?
quelle
Einfach ausgedrückt:
quelle
sftp
undscp
erfordert spezielle Programme auf der Serverseite, im Gegensatz zu FISH, das nur grundlegende Unix-Dienstprogramme in der Remote-Shell verwendet.scp
fü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.el
In Emacs war dies auch möglich: Der reguläre TRAMP-Client funktionierte nicht, da erstat
nicht auf Android verfügbar war.)scp
neben der Client-Seite auch die Server-Seite benötigt wird? Bei einer schnellen Google-Suche konnte ich nichts finden, was bestätigt, dass diesscp
auch auf der Serverseite erforderlich ist.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
quelle
scp
fü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.el
In Emacs war dies auch möglich: Der reguläre TRAMP-Client funktionierte nicht, da erstat
nicht auf Android verfügbar war.)