sshfs quebra links simbólicos do servidor SFTP

16

Alguém sabe como montar um caminho SFTP remoto via SSHFS para que você possa trabalhar com links simbólicos? Quando faço isso, todos os links simbólicos que eu crio apontam para os arquivos errados (não os que eu vinculei.) Todos os links simbólicos nos quais estou interessado são relativos (não absolutos), portanto, para que eles apareçam exatamente como na máquina remota ser ideal.

Usando sshfs com as opções de montagem padrão, não consigo criar um link simbólico para outro arquivo no diretório atual:

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

O que está obviamente incorreto, pois o destino do link está no diretório atual ( ./test), mas aqui você pode ver que o sshfs cria um link /testincorreto - o destino do link /mnt/path/to/sshfs/mount/testnão está /test.

Ao adicionar a transform_symlinksopção ao montar o sistema de arquivos sshfs, recebo um link relativo com o mesmo comando, mas ele ainda aponta para o lugar errado:

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

Aqui eu tentei vincular ./testno diretório atual, mas em vez disso, consegui um link para ../../../testtrês níveis!

Conectar-se ao cliente SFTP da linha de comando em sftpvez de montar com sshfs funciona no entanto:

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

Portanto, isso me diz que o servidor SFTP remoto está funcionando bem (já que posso criar links simbólicos com um cliente SFTP dedicado), mas, por alguma razão, não consigo criar links simbólicos funcionais através do sshfs.

Curiosamente, quando eu uso o sshfs para montar um caminho em um servidor SSH que fornece acesso ao shell (em oposição a um servidor somente SFTP), os links simbólicos funcionam bem - posso criá-los corretamente. Apenas parece ser problemático quando conectado a um servidor somente SFTP.

O que estou fazendo de errado? Existe uma opção especial que tenho que passar para o sshfs quando estou me conectando a um servidor SFTP para fazer com que os links simbólicos funcionem?

Malvineous
fonte
Não entendi sua pergunta: o sshfs sempre usa SFTP. O que você quer dizer com "via ssh em vez de sftp"? Parece que você está tendo problemas com um servidor SFTP específico. Se você usa um cliente SFTP, o que ele mostra quando você executa ls -los links simbólicos de teste?
Gilles 'SO- stop be evil'
Desculpe, quando digo sftpem minúsculas quero dizer a interface SFTP da linha de comando, ou seja /usr/bin/sftp. Meu último exemplo no post é quando eu faço o link simbólico usando esse cliente SFTP, assim como você solicita.
Malvineous 04/04
Eu ainda não tenho ideia do que você quer dizer. Edite sua postagem para esclarecer o que você está fazendo localmente, o que você está fazendo em uma montagem sshfs sem a transform_symlinksopção, o que você está fazendo em uma montagem ssh com a transform_symlinksopção e o que você está fazendo com um cliente sftp. Os links simbólicos funcionam normalmente no SSHFS; portanto, a resposta para sua primeira frase é "nada" - você encontrou um bug ou não está digitando os comandos certos, mas seus relatórios não são muito claros para saber o que está errado.
Gilles 'SO- stop be evil'
Tentei esclarecer o que estou pedindo da melhor maneira possível, mas não tenho muita certeza do que você está procurando, pois a pergunta me parece clara. Se ainda não estiver claro, diga-me especificamente quais partes não fazem sentido e por quê, e tentarei focar nesses bits. Espero que suas perguntas sejam respondidas agora.
Malvineous

Respostas:

13

Para transformar /links simbólicos absolutos remotos (começando com ) em relativos ao sshfsponto de montagem, use a follow_symlinksopção:

sshfs -o follow_symlinks ...

A transform_symlinksopção não faz nada para mim, veja este problema .

Tom Hale
fonte
resposta correta no meu caso. Eu não vi arquivos / pasta com links simbólicos antes e agora vejo e posso segui-lo.
logoff
1

Já vi o comportamento que você descreveu antes, mas testando-o agora, posso criar links simbólicos muito bem em um diretório montado no 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)

I atualizado sshd no controle remoto cerca de 4 meses atrás. A versão antiga teria vários anos. Talvez a atualização tenha corrigido o problema. Isso pode dar uma pista do que estou usando agora:

$ 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 $

Eu não fiz nada para mudar o sshfs, exceto o que o Ubuntu faz automaticamente.
HTH.

James K. Lowden
fonte