Qual è la differenza tra i protocolli SFTP, SCP e FISH?


59

Pensavo che SCP fosse uno strumento per copiare file su SSH, e la copia di file su SSH si chiama SFTP, che è esso stesso sinonimo di FISH.

Ma ora mentre stavo cercando un plug-in Total Commander per farlo in Windows, ho notato che sulla sua pagina dice "Permette l'accesso a server remoti tramite FTP sicuro (FTP via SSH). Richiede SSH2. NON È lo stesso come SCP! ".

Se non è lo stesso, allora cosa ho capito male?


5
Questa è un'estensione di una domanda precedente . (@Ivan: sarebbe stato utile menzionarlo.)
Gilles 'SO- smetti di essere malvagio'

Risposte:


57

SFTP non è il protocollo FTP su ssh, ma un'estensione al protocollo SSH incluso in SSH2 (e alcune implementazioni SSH1). SFTP è un protocollo di trasferimento file simile all'FTP ma utilizza il protocollo SSH come protocollo di rete (e trae vantaggio dal lasciare SSH per gestire l'autenticazione e la crittografia).

SCP è solo per il trasferimento di file e non può fare altre cose come elencare directory remote o rimuovere file, cosa che SFTP fa.

FISH sembra essere ancora un altro protocollo che può utilizzare SSH o RSH per trasferire file.


11
Vale la pena aggiungere: c'è anche FTPS, che è FTP su TLS.
mikemaccana,

3
@mikemaccana è quindi possibile aggiungere FTPES strega è la possibilità di utilizzare esplicitamente ftps su una normale connessione ftp
Kiwy

26

Il protocollo SSH crea un tunnel sicuro attraverso il quale è possibile trasferire un flusso bidirezionale e è possibile utilizzare quel flusso per connettere qualsiasi due processi desiderati.

I due processi più familiari sarebbero una shell (sul server) e un emulatore di terminale interattivo (sul client). Questo è quello che stai usando quando vai su un server e digiti i comandi al prompt della shell remota.

SCP è il trasferimento di file fatto usando solo quella shell e un comando remoto. In SCP, una volta che il client è collegato al server e tutte le autenticazioni e autorizzazioni sono state eseguite, il client invia alla shell remota un comando simile scp -f myfile.txt, che scrive semplicemente il contenuto del file myfile.txt sullo stream (per il client da leggere) o scp -t myfile.txtche legge dallo stream e scrive su myfile.txt.

Noterai che -f e -t (per "da" e "a") non sono nelle manpage di scp. Sono considerati interni. Esiste uno schema di riconoscimento leggero e uno schema per il trasferimento di directory avvolgendo il contenuto del file in semplici intestazioni. Ma per la maggior parte SCP è una questione basilare di scrivere i byte del file sul tunnel SSH, lasciando che SSH gestisca cose complicate come la compressione e l'integrità.

SFTP è un protocollo di trasferimento file molto più complesso, che viene nuovamente sintonizzato tramite SSH.

In SFTP sia le richieste che le risposte sono pacchetti con codifica binaria con nomi come "SSH_FXP_OPEN", "SSH_FXP_STAT", "SSH_FXP_READ", "SSH_FXP_DATA", "SSH_FXP_CLOSE".

Una caratteristica interessante del protocollo è che i comandi possono essere sottoposti a pipeline e le risposte possono arrivare in qualsiasi ordine. Ciò può significare che le sessioni trascorrono meno tempo in attesa di risposte e ci sono opportunità per ottimizzare i trasferimenti simultanei da un server con origini dati di varie velocità, anche se non so fino a che punto sono state colte tali opportunità.

SFTP ha i comandi per fare molte cose che SCP non affronta; come eliminare, rinominare, troncare, spostare, ecc.

Tutti i dettagli sono disponibili in una bozza IETF .

Vale la pena notare che i pacchetti SSH più recenti sostituiscono il file scpbinario dell'utente con un collegamento simbolico al file binario SFTP. Questo SFTP ha l'aspetto di scp, ma sotto le coperte usa il protocollo SFTP.

Citation - O'Reilly SSH: The Secure Shell, The Definitive Guide , sezione 5.7 "Sottosistemi":

ATTENZIONE: Non rimuovere la riga del sottosistema-sftp da sshd2_config: è necessario per far funzionare scp2 e sftp. Internamente, entrambi i programmi eseguono ssh2 -s sftp per eseguire trasferimenti di file.

Il pesce è un pezzo interessante di storia. Supponiamo che tu voglia trasferire file su SSH, ma il tuo sistema remoto non ha SCP. O forse vuoi fare operazioni sui file più sofisticate di SCP, ma il tuo sistema remoto non ha SFTP. Nessuno di questi scenari è probabile oggi, ma quando fu inventato Fish, lo erano.

Quindi gli sviluppatori del client Midnight Commander hanno iniziato a creare la propria soluzione. È simile a scp in linea di principio, ma ci sono più comandi. Il client invia comandi simili a:

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

Se stai parlando con un server Fish, interpreterà il #RETRcomando. Tuttavia, se sul server remoto non è installato un server Fish, i comandi verranno interpretati dalla shell. Prima un commento, quindi un comando che stampa le informazioni sul file, seguito dal contenuto del file racchiuso in alcuni marcatori.

In effetti, in assenza di scp o fish, il client ha "lanciato il proprio" scp equivalente - ma può anche inviare comandi shell per rinominare, spostare, troncare, ecc.

I dettagli di Fish sono nella fonte del comandante di mezzanotte qui .

Cosa significa tutto ciò dal punto di vista dell'utente finale?

  • le precedenti implementazioni di server SSH supportano scp ma non SFTP; non puoi usare un client SFTP con questi
  • Utilizzare SFTP per prestazioni, affidabilità e flessibilità
  • Il tuo client "scp" potrebbe essere un client SFTP sotto mentite spoglie ( citazione necessaria )
  • Il pesce potrebbe essere utile in circostanze di nicchia, ma altrimenti utilizzare l'SFTP più standard.

20

In parole semplici:

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
Ma sftpe scprichiede programmi speciali sul lato server, a differenza FISH, che usa solo utuilities base Unix nella shell remota.
imz - Ivan Zakharyaschev,

Secondo la descrizione di FISH, una caratteristica notevole di FISH è che non richiede qualcosa di speciale sul lato remoto (nessun programma server, come scpper scp o sftp-server). E ci sono casi in cui il lato remoto è un Unix "limitato", in cui non è possibile installare ciò che si desidera: per trasferire file su Android tramite SSH (tramite WiFi), ho scritto il set di script rpush-cat - forse, un client FISH avrebbe funzionato. (Anche tramp-fish.elin Emacs potrebbe: il normale client TRAMP non funzionava perché statnon era presente su Android.)
imz - Ivan Zakharyaschev,

2
Potresti approfondire come scpè necessario anche sul lato server, oltre che sul lato client? Con una rapida ricerca su Google, non sono riuscito a trovare nulla che confermi che scpè necessario anche sul lato server.
Johannes Bittner,

11

FISH e SFTP sono simili e, come osservato, funzionano entrambi su SSH, SFTP richiede supporto e configurazione specifici nel server SSH per facilitare il trasferimento, ma è un po 'più sicuro e consente a SysAdmins di consentire solo SFTP (in queste situazioni FISH ha vinto non funziona).

FISH richiede una shell (sh / rsh per esempio) da copiare, e quindi richiede l'accesso SSH completo alla macchina, immagino che sarebbe più difficile da proteggere (non posso commentare obiettivamente su questo come non ho mai dovuto).

Ove possibile, raccomanderei SFTP, scp, FISH (in questo ordine).

Articolo FISH di Wikipedia


Secondo la descrizione collegata, una caratteristica notevole di FISH è che non richiede qualcosa di speciale sul lato remoto (nessun programma server, come scpper scp o sftp-server). E ci sono casi in cui il lato remoto è un Unix "limitato", in cui non è possibile installare ciò che si desidera: per trasferire file su Android tramite SSH (tramite WiFi), ho scritto il set di script rpush-cat - forse, un client FISH avrebbe funzionato. (Anche tramp-fish.elin Emacs potrebbe: il normale client TRAMP non funzionava perché statnon c'era su Android.)
imz - Ivan Zakharyaschev,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.