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.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.
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 #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?
- Ä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.