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.txt
qui écrit simplement le contenu du fichier myfile.txt dans le flux (pour le client). à lire) ou scp -t myfile.txt
qui 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 scp
binaire 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 #RETR
commande. 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.