web-dev-qa-db-fra.com

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

Je pensais que SCP est un outil pour copier des fichiers sur SSH, et la copie de fichiers sur SSH s'appelle SFTP, qui est elle-même synonyme de FISH.

Mais maintenant que je cherchais un plugin Total Commander pour le faire dans Windows, j'ai remarqué que sur sa page, il dit "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?

67
Ivan

SFTP n'est pas le protocole FTP sur ssh, mais une extension du protocole SSH inclus dans SSH2 (et certaines implémentations SSH1). SFTP est un protocole de transfert de fichiers similaire à FTP mais utilise le protocole SSH comme protocole réseau (et profite du fait de laisser SSH pour gérer l'authentification et le cryptage).

SCP est uniquement destiné au transfert de fichiers et ne peut pas faire d'autres choses comme lister des répertoires distants ou supprimer des fichiers, ce que SFTP fait.

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

63
jsbillings

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

Les deux processus les plus connus seraient un Shell (au niveau du serveur) et un émulateur de terminal interactif (au niveau du client). C'est ce que vous utilisez lorsque vous connectez ssh à un serveur et tapez des commandes à l'invite du shell distant.

[~ # ~] scp [~ # ~] est le transfert de fichiers effectué en utilisant uniquement ce shell et 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 comme scp -f myfile.txt, qui écrit simplement le contenu du fichier myfile.txt dans le flux (à lire par le client) ou scp -t myfile.txt qui lit le flux et écrit dans monfichier.txt.

Vous remarquerez que -f et -t (pour "from" et "to") ne figurent pas dans les pages de manuel scp. Ils sont considérés comme internes. Il existe un schéma de reconnaissance léger et un schéma de transfert de répertoires en encapsulant le contenu du fichier dans des en-têtes simples. Mais pour la plupart SCP est une question de base d'écrire les octets du fichier sur le tunnel SSH, laissant SSH gérer des choses compliquées comme la compression et l'intégrité.

[~ # ~] sftp [~ # ~] est un protocole de transfert de fichiers beaucoup plus complexe, qui est à nouveau optimisé via SSH.

Dans SFTP, les demandes et les réponses sont des paquets codés en binaire avec des noms comme "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 pipelinées, et les réponses peuvent venir dans n'importe quel ordre. Cela peut signifier que les sessions passent moins de temps à attendre les réponses, et il existe des opportunités d'optimiser les transferts simultanés à partir d'un serveur avec des sources de données de différentes vitesses - bien que je ne sache pas dans quelle mesure ces opportunités ont été saisies.

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 IETF Draft .

Il convient de noter que les nouveaux packages SSH remplacent le binaire utilisateur scp 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: Secure Shell, The Definitive Guide, 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 fichiers plus sophistiquées que SCP, mais votre système distant ne dispose pas de SFTP. Aucun de ces scénarios n'est probable aujourd'hui, mais quand Fish a été inventé, ils l'étaient.

Les développeurs du client Midnight Commander se sont donc mis à créer 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 le #RETR commande. Cependant, si le serveur distant n'a pas de serveur Fish installé, les commandes seront interprétées par le Shell. D'abord un commentaire, puis une commande qui imprime des informations sur le fichier, suivi du contenu du fichier entouré de certains marqueurs.

En effet, en l'absence de scp ou de poisson, le client a "roulé 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 prennent en charge scp mais pas SFTP; vous ne pouvez pas utiliser un client SFTP avec ces
  • Utilisez SFTP pour les performances, la fiabilité et la flexibilité
  • Votre client "scp" peut être un client SFTP déguisé ( Citation nécessaire)
  • Le poisson pourrait être utile dans des circonstances de niche, mais sinon, utilisez le SFTP plus standard.
34
slim

En termes simples:

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 et SFTP sont similaires, et comme observé fonctionnent tous les deux sur SSH, SFTP nécessite un support et une configuration spécifiques dans 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, FISH a gagné ça marche pas).

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 cela car je n'ai jamais eu à le faire).

Dans la mesure du possible, je recommanderais SFTP, scp, FISH (dans cet ordre).

Article Wikipédia sur les POISSONS

11
N J