sshfs rompt les liens symboliques du serveur SFTP

16

Quelqu'un sait-il comment monter un chemin SFTP distant via SSHFS afin que vous puissiez travailler avec des liens symboliques? Lorsque je fais cela, tous les liens symboliques que je crée pointent vers les mauvais fichiers (pas ceux auxquels je suis lié). Tous les liens symboliques qui m'intéressent sont relatifs (pas absolus), de sorte qu'ils apparaissent exactement comme ils le font sur la machine distante. être idéal.

En utilisant sshfs avec les options de montage par défaut, je ne peux pas créer de lien symbolique vers un autre fichier dans le répertoire courant:

$ cd /mnt/path/to/sshfs/mount
$ ln -s ./test ./test2
$ ls test2
lrwxrwxrwx 1 root webusers   11 Jul  3 09:11 test2 -> /test

Ce qui est évidemment incorrect, car la cible du lien est dans le répertoire courant ( ./test), mais ici vous pouvez voir que sshfs crée un lien vers /testlequel est incorrect - la cible du lien /mnt/path/to/sshfs/mount/testne l' est pas /test.

En ajoutant l' transform_symlinksoption lorsque je monte le système de fichiers sshfs, j'obtiens un lien relatif à la place avec la même commande, mais il pointe toujours au mauvais endroit:

$ cd /mnt/path/to/sshfs/mount
$ ln -s ./test ./test2
$ ls test2
lrwxrwxrwx 1 root webusers   11 Jul  3 09:13 test2 -> ../../../test

Ici, j'ai essayé de créer un lien vers ./testdans le répertoire actuel, mais à la place, j'ai obtenu un lien vers ../../../testtrois niveaux!

La connexion avec le client SFTP en ligne de commande sftpau lieu du montage avec sshfs fonctionne cependant:

sftp> open ...
sftp> symlink test test2
...
$ cd /mnt/path/to/sshfs/mount
$ ls test2
lrwxrwxrwx 1 root webusers   11 Jul  3 09:13 test2 -> test

Donc, cela me dit que le serveur SFTP distant fonctionne bien (car je peux créer des liens symboliques avec un client SFTP dédié), mais pour une raison quelconque, je ne peux pas créer de liens symboliques de travail via sshfs.

Curieusement, lorsque j'utilise sshfs pour monter un chemin sur un serveur SSH fournissant un accès shell (par opposition à un serveur SFTP uniquement), les liens symboliques fonctionnent correctement - je peux les créer correctement. Cela ne semble problématique que lorsqu'il est connecté à un serveur SFTP uniquement.

Qu'est-ce que je fais mal? Existe-t-il une option spéciale que je dois transmettre à sshfs lorsque je me connecte à un serveur SFTP pour que les liens symboliques fonctionnent?

Malvineous
la source
Je ne comprends pas votre question: sshfs utilise toujours SFTP. Qu'entendez-vous par «via ssh au lieu de sftp»? Il semble que vous rencontriez des problèmes avec un serveur SFTP particulier. Si vous utilisez un client SFTP, que montre-t-il lorsque vous exécutez ls -lvos liens symboliques de test?
Gilles 'SO- arrête d'être méchant'
Désolé, quand je dis sftpen minuscules, je veux dire l'interface SFTP en ligne de commande, c'est à dire /usr/bin/sftp. Mon dernier exemple dans la publication est lorsque je crée le lien symbolique en utilisant ce client SFTP, exactement comme vous le demandez.
Malvineous
Je n'ai toujours aucune idée de ce que tu veux dire. Veuillez modifier votre message pour clarifier ce que vous faites localement, ce que vous faites sur un montage sshfs sans l' transform_symlinksoption, ce que vous faites sur un montage ssh avec l' transform_symlinksoption et ce que vous faites avec un client sftp. Les liens symboliques fonctionnent normalement sur SSHFS, donc la réponse à votre première phrase est «rien» - soit vous avez rencontré un bogue, soit vous ne saisissez pas les bonnes commandes, mais votre rapport est trop peu clair pour savoir ce qui ne va pas.
Gilles 'SO- arrête d'être méchant'
J'ai essayé de clarifier ce que je demande du mieux que je peux, mais je ne sais pas trop ce que vous recherchez, car la question me semble claire. Si ce n'est toujours pas clair, veuillez me dire précisément quelles parties n'ont pas de sens et pourquoi, et j'essaierai de me concentrer sur ces bits. J'espère que vos questions auront maintenant une réponse.
Malvineous

Réponses:

13

Pour transformer les /liens symboliques absolus distants (en commençant par ) pour qu'ils soient relatifs au sshfspoint de montage, utilisez l' follow_symlinksoption:

sshfs -o follow_symlinks ...

L' transform_symlinksoption ne fait rien pour moi, voir ce problème .

Tom Hale
la source
bonne réponse dans mon cas. Je n'ai jamais vu de fichiers / dossier avec lien symbolique auparavant, et maintenant je le vois et je peux le suivre.
fermeture de session le
1

J'ai vu le comportement que vous décrivez auparavant, mais en le testant maintenant, je peux très bien créer des liens symboliques sur un répertoire monté par sshfs:

$ touch T
$ ln -s T L
$ ls -l T L
lrwxrwxrwx 1 user user 1 Apr  9 16:10 L -> T
-rw-rw-r-- 1 user user 0 Apr  9 16:10 T

$ echo hello >> L
$ cat T
hello
$ pwd
/home/user/oak/tmp
$ mount | grep oak
user@oak: on /home/user/oak type fuse.sshfs (rw,nosuid,nodev,user=user)

J'ai mis à jour sshd sur la télécommande il y a environ 4 mois. L'ancienne version aurait été vieille de plusieurs années. Peut-être que la mise à niveau a résolu le problème. Cela peut donner une idée de ce que j'utilise maintenant:

$ ssh oak 'ident $(which sshd)' | grep ssh
/usr/sbin/sshd:
 $NetBSD: sshd.c,v 1.13.4.1 2015/04/30 06:07:31 riz Exp $
 $NetBSD: sshpty.c,v 1.2.26.1 2015/04/30 06:07:31 riz Exp $
 $NetBSD: sshlogin.c,v 1.4.22.1 2015/04/30 06:07:31 riz Exp $

Je n'ai rien fait pour changer sshfs, sauf ce que fait Ubuntu automatiquement.
HTH.

James K. Lowden
la source