Quelle est la différence entre les protocoles SFTP, SCP et FISH?

59

J'avais l'habitude de penser que SCP était un outil pour copier des fichiers sur SSH, et copier des fichiers sur SSH s'appelle SFTP, qui est lui-même synonyme de FISH.

Mais maintenant que je cherchais un plugin Total Commander pour le faire sous Windows, j’ai remarqué que sur sa page, il est indiqué: "Permet l’accès aux serveurs distants via FTP sécurisé (FTP via SSH). Nécessite SSH2. Ce n’est pas la même chose. comme SCP! ".

Si ce n'est pas la même chose, qu'est-ce que je comprends mal?

Ivan
la source
5
Ceci est une extension d'une question précédente . (@ Ivan: il aurait été utile de mentionner cela.)
Gilles, arrête de faire le mal '

Réponses:

57

SFTP n'est pas le protocole FTP sur ssh, mais une extension du protocole SSH inclus dans SSH2 (et certaines implémentations de SSH1). SFTP est un protocole de transfert de fichier similaire à FTP mais utilise le protocole SSH comme protocole réseau (et tire parti du fait que SSH se charge de l’authentification et du cryptage).

SCP sert uniquement à transférer des fichiers et ne peut pas effectuer d'autres tâches telles que la liste des répertoires distants ou la suppression de fichiers, comme le fait SFTP.

FISH semble être un autre protocole pouvant utiliser SSH ou RSH pour transférer des fichiers.

jsbillings
la source
11
À noter: il y a aussi FTPS, qui est FTP sur TLS.
Mikemaccana
3
@mikemaccana, vous pouvez ensuite ajouter FTPES à la possibilité d'utiliser explicitement ftps sur une connexion ftp normale
Kiwy
26

Le protocole SSH crée un tunnel sécurisé à travers lequel vous pouvez transférer un flux bidirectionnel. Vous pouvez utiliser ce flux pour connecter deux processus à votre guise.

Les deux processus les plus familiers sont un shell (sur le serveur) et un émulateur de terminal interactif (sur le client). C'est ce que vous utilisez lorsque vous utilisez SSH sur un serveur et que vous tapez des commandes à l'invite du shell distant.

SCP est un transfert de fichier effectué uniquement à l'aide de ce shell et d'une commande à distance. Dans SCP, une fois que le client est connecté au serveur et que toutes les authentifications et autorisations ont été effectuées, le client envoie au shell distant une commande semblable à celle scp -f myfile.txtqui écrit simplement le contenu du fichier myfile.txt dans le flux (pour le client). à lire) ou scp -t myfile.txtqui lit dans le flux et écrit dans myfile.txt.

Vous remarquerez que -f et -t (pour "de" et "à") ne sont pas dans les pages de manuel scp. Ils sont considérés comme internes. Il existe un schéma d'accusé de réception léger et un schéma permettant de transférer des répertoires en encapsulant le contenu du fichier dans de simples en-têtes. Mais pour l’essentiel, SCP consiste essentiellement à écrire les octets du fichier sur le tunnel SSH, ce qui permet à SSH de gérer des tâches complexes telles que la compression et l’intégrité.

SFTP est un protocole de transfert de fichiers beaucoup plus complexe, qui est lui aussi tunnellisé via SSH.

Dans SFTP, les demandes et les réponses sont des paquets codés en binaire avec des noms tels que "SSH_FXP_OPEN", "SSH_FXP_STAT", "SSH_FXP_READ", "SSH_FXP_DATA", "SSH_FXP_CLOSE".

Une caractéristique intéressante du protocole est que les commandes peuvent être mises en pipeline et que les réponses peuvent arriver dans n'importe quel ordre. Cela peut signifier que les sessions passent moins de temps à attendre les réponses et qu'il existe des possibilités d'optimiser les transferts simultanés depuis un serveur avec des sources de données à différentes vitesses - bien que je ne sache pas dans quelle mesure ces opportunités ont été exploitées.

SFTP a des commandes pour faire beaucoup de choses que SCP ne traite pas; comme supprimer, renommer, tronquer, déplacer, etc.

Tous les détails sont disponibles dans un brouillon IETF .

Il convient de noter que les nouveaux packages SSH remplacent le scpbinaire utilisateur par un lien symbolique vers le binaire SFTP. Ce SFTP a l'apparence de scp, mais sous les couvertures, il utilise le protocole SFTP.

Citation - O'Reilly SSH: Le shell sécurisé, Le guide définitif , section 5.7 "Sous-systèmes":

AVERTISSEMENT: Ne supprimez pas la ligne subsystem-sftp de sshd2_config: elle est requise pour que scp2 et sftp fonctionnent. En interne, les deux programmes exécutent ssh2 -s sftp pour effectuer des transferts de fichiers.

Le poisson est un morceau d'histoire intéressant. Supposons que vous souhaitiez transférer des fichiers via SSH, mais que votre système distant ne dispose pas de SCP. Ou peut-être souhaitez-vous effectuer des opérations de fichier plus sophistiquées que SCP, mais votre système distant ne dispose pas de SFTP. Aucun de ces scénarios n'est vraisemblable aujourd'hui, mais lorsque Fish a été inventé, ils l'étaient.

Les développeurs du client Midnight Commander ont donc créé leur propre solution. C'est similaire à scp en principe, mais il y a plus de commandes. Le client envoie des commandes qui ressemblent à:

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

Si vous parlez à un serveur Fish, il interprétera la #RETRcommande. Cependant, si aucun serveur Fish n'est installé sur le serveur distant, les commandes seront interprétées par le shell. Tout d'abord un commentaire, puis une commande qui imprime des informations sur le fichier, suivies du contenu du fichier entouré par certains marqueurs.

Effectivement, en l'absence de scp ou de poisson, le client a "lancé son propre" équivalent scp - mais il peut également envoyer des commandes shell pour renommer, déplacer, tronquer, etc.

Les détails de Fish sont dans la source Midnight Commander ici .

Qu'est-ce que tout cela signifie du point de vue de l'utilisateur final?

  • Les anciennes implémentations de serveur SSH supportent scp mais pas SFTP; vous ne pouvez pas utiliser un client SFTP avec ces
  • Utilisez SFTP pour la performance, la fiabilité et la flexibilité
  • Votre client "scp" peut être un client SFTP déguisé ( citation nécessaire )
  • Le poisson peut être utile dans certaines circonstances, mais utilisez le SFTP, plus standard.
svelte
la source
20

Dit simple:

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
la source
1
Mais sftpet scpnécessite des programmes spéciaux côté serveur, contrairement à FISH, qui utilise uniquement les utilitaires Unix de base dans le shell distant.
imz - Ivan Zakharyaschev
Selon la description de FISH, une caractéristique remarquable de FISH est qu’il n’exige pas de fonctions spéciales du côté distant (pas de programme serveur, comme scppour scp ou sftp-server). Et il en effet des cas où êtes les côté à distance est un « restreint » Unix, où vous ne pouvez pas installer ce que vous voulez: pour transférer des fichiers vers Android via SSH (via le Wifi), je l' ai écrit l'ensemble des rpush-chat scripts - peut-être qu'un client FISH pourrait fonctionner. ( tramp-fish.elDans Emacs, vous pourriez aussi: le client TRAMP habituel ne fonctionnait pas car il statn'existait pas sous Android.)
imz - Ivan Zakharyaschev
2
Pourriez-vous préciser comment scple serveur est également nécessaire, en plus du client? Avec une recherche rapide sur Google, je n'ai rien trouvé qui confirme que cela scpest également nécessaire côté serveur.
Johannes Bittner
11

FISH et SFTP sont similaires, et comme observé, les deux fonctionnent sur SSH. SFTP nécessite un support et une configuration spécifiques sur le serveur SSH pour faciliter le transfert, mais il est un peu plus sécurisé et permet aux administrateurs système d'autoriser uniquement SFTP (dans ces situations pas travailler).

FISH nécessite un shell (sh / rsh par exemple) pour copier, et nécessite donc un accès SSH complet à la machine. J'imagine qu'il serait plus difficile à sécuriser (je ne peux pas commenter objectivement ceci car je ne l'ai jamais eu à le faire).

Si possible, je recommanderais SFTP, scp, FISH (dans cet ordre).

Article sur le poisson dans Wikipedia

New Jersey
la source
Selon la description associée, une caractéristique remarquable de FISH est qu’il n’exige pas de fonctions spéciales du côté distant (pas de programme serveur, comme scppour scp ou sftp-server). Et il en effet des cas où êtes les côté à distance est un « restreint » Unix, où vous ne pouvez pas installer ce que vous voulez: pour transférer des fichiers vers Android via SSH (via le Wifi), je l' ai écrit l'ensemble des rpush-chat scripts - peut-être qu'un client FISH pourrait fonctionner. ( tramp-fish.elDans Emacs, vous pourriez aussi: le client TRAMP habituel ne fonctionnait pas car il statn'existait pas sur Android.)
imz - Ivan Zakharyaschev