it-swarm.it

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

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?

67
Ivan

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 ennesimo protocollo che può usare SSH o RSH per trasferire file.

63
jsbillings

Il protocollo SSH crea un tunnel sicuro attraverso il quale è possibile trasferire un flusso bidirezionale e è possibile utilizzare tale 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 usi ssh su un server e digiti i comandi al prompt di Shell remoto.

[~ # ~] 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 come scp -f myfile.txt, che scrive semplicemente il contenuto del file myfile.txt nello stream (per la lettura del client) o scp -t myfile.txt che 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 è sintonizzato nuovamente 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 tali opportunità siano state colte.

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

Tutti i dettagli sono disponibili in IETF Draft .

Vale la pena notare che i pacchetti SSH più recenti sostituiscono l'utente scp binario con un collegamento simbolico al binario SFTP. Questo SFTP ha l'aspetto di scp, ma sotto le coperte sta usando 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 della 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 #RETR comando. Tuttavia, se sul server remoto non è installato un server Fish, i comandi verranno interpretati da 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 di Midnight Commander 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
  • Usa 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.
34
slim

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

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) per copiare, e quindi richiede pieno accesso SSH 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

11
N J