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?
ssh
scp
sftp
fish-protocol
Ivan
la source
la source
Réponses:
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.
la source
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) ouscp -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.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 à:
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?
la source
Dit simple:
la source
sftp
etscp
nécessite des programmes spéciaux côté serveur, contrairement à FISH, qui utilise uniquement les utilitaires Unix de base dans le shell distant.scp
pour 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.el
Dans Emacs, vous pourriez aussi: le client TRAMP habituel ne fonctionnait pas car ilstat
n'existait pas sous Android.)scp
le serveur est également nécessaire, en plus du client? Avec une recherche rapide sur Google, je n'ai rien trouvé qui confirme que celascp
est également nécessaire côté serveur.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
la source
scp
pour 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.el
Dans Emacs, vous pourriez aussi: le client TRAMP habituel ne fonctionnait pas car ilstat
n'existait pas sur Android.)