SSH: fish comme un poisson
Le protocole fish (Files transferred over SHell) est une invention de KDE: il encapsule des commandes shell dans une connexion SSH pour explorer et transférer des fichiers comme si c’était un montage réseau. Konqueror le fait nativement: tapez fish://user@serveur/home/user dans la barre d’adresse et le filesystem distant apparaît dans le navigateur de fichiers.
Ce que fish fait
Fish n’est pas un montage (pas de FUSE, pas de kernel module): c’est le client qui envoie des commandes shell (ls, cat, cp) via SSH et parse le résultat. Le serveur n’a besoin de rien de spécial: juste un shell POSIX. Le client construit les commandes, les envoie sur le canal SSH et présente le résultat comme un filesystem.
Pour lister un directory:
# Ce que fish envoie (simplifié):
echo -e "### 2008\ncd /home/user && ls -l --time-style='+%Y%m%d' 2>/dev/null\necho -e '### 200'"
Le ### 200 est le délimiteur que fish parse pour séparer les commandes valides des erreurs.
Ce que fish ne fait pas
Fish ne monte pas le filesystem: il ne peut pas être utilisé par un process non-KDE (pas de cp, pas de find, pas de grep). Il ne fonctionne pas hors KDE. Il est lent sur les filesystems avec beaucoup de fichiers (chaque listing est un aller-retour SSH).
Pour un montage vrai, il y a sshfs (l’article suivant). Pour un transfert ponctuel, il y a scp. Pour un browsing graphique dans KDE, il y a fish.