sshfs przerywa dowiązania symboliczne z serwera SFTP

16

Czy ktoś wie, jak zamontować zdalną ścieżkę SFTP przez SSHFS, aby można było pracować z dowiązaniami symbolicznymi? Kiedy to robię, wszystkie tworzone przeze mnie dowiązania symboliczne wskazują niewłaściwe pliki (nie te, z którymi się łączyłem). Wszystkie dowiązania symboliczne, którymi jestem zainteresowany, są względne (nie absolutne), więc ich pojawienie się dokładnie tak, jak na komputerze zdalnym bądź idealny.

Używając sshfs z domyślnymi opcjami montowania, nie mogę utworzyć dowiązania symbolicznego do innego pliku w bieżącym katalogu:

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

Co jest oczywiście niepoprawne, ponieważ cel odsyłacza znajduje się w bieżącym katalogu ( ./test), ale tutaj widać, że sshfs tworzy odsyłacz do /testniepoprawnego - cel odsyłacza /mnt/path/to/sshfs/mount/testnie jest /test.

Dodając transform_symlinksopcję podczas montowania systemu plików sshfs, otrzymuję łącze względne z tą samą komendą, ale nadal wskazuje to niewłaściwe miejsce:

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

Tutaj próbowałem ./testutworzyć link do bieżącego katalogu, ale zamiast tego dostałem link do ../../../testtrzech poziomów wyżej!

sftpJednak połączenie z klientem SFTP z wiersza poleceń zamiast montowania za pomocą sshfs działa:

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

To mówi mi, że zdalny serwer SFTP działa dobrze (ponieważ mogę tworzyć dowiązania symboliczne za pomocą dedykowanego klienta SFTP), ale z jakiegoś powodu nie jestem w stanie utworzyć żadnych działających dowiązań symbolicznych przez sshfs.

Co dziwne, kiedy używam sshfs do montowania ścieżki na serwerze SSH zapewniającym dostęp do powłoki (w przeciwieństwie do serwera tylko SFTP), dowiązania symboliczne działają dobrze - mogę je poprawnie utworzyć. Wydaje się to problematyczne tylko w przypadku połączenia z serwerem tylko SFTP.

Co ja robię źle? Czy jest specjalna opcja, którą muszę przekazać do sshfs, kiedy łączę się z serwerem SFTP, aby dowiązania symboliczne działały?

Malvineous
źródło
Nie rozumiem twojego pytania: sshfs zawsze używa SFTP. Co rozumiesz przez „via ssh zamiast sftp”? Wygląda na to, że masz problemy z jednym konkretnym serwerem SFTP. Jeśli korzystasz z klienta SFTP, co to pokazuje po uruchomieniu ls -ltestowych dowiązań symbolicznych?
Gilles „SO- przestań być zły”
Przepraszam, gdy mówię sftpmałymi literami, mam na myśli interfejs SFTP wiersza poleceń, tj /usr/bin/sftp. Mój ostatni przykład w poście jest, gdy tworzę dowiązanie symboliczne za pomocą tego klienta SFTP, tak jak prosisz.
Malvineous
Nadal nie mam pojęcia, co masz na myśli. Przeprowadź edycję swojego postu, aby wyjaśnić, co robisz lokalnie, co robisz na sshfs mount bez transform_symlinksopcji, co robisz na sshf mount z transform_symlinksopcją i co robisz z klientem sftp. Dowiązania symboliczne działają normalnie na SSHFS, więc odpowiedź na pierwsze zdanie brzmi „nic” - albo napotkałeś błąd, albo nie wpisujesz właściwych poleceń, ale raportowanie jest zbyt niejasne, aby wiedzieć, co jest nie tak.
Gilles „SO- przestań być zły”
Starałem się wyjaśnić, o co proszę, najlepiej jak potrafię, ale nie jestem do końca pewien, o co ci chodzi, ponieważ pytanie wydaje mi się jasne. Jeśli nadal nie jest jasne, powiedz mi dokładnie, które części nie mają sensu i dlaczego, a ja postaram się skupić na tych bitach. Mam nadzieję, że na twoje pytania udzielono odpowiedzi.
Malvineous,

Odpowiedzi:

13

Aby przekształcić zdalne bezwzględne (zaczynające się od /) dowiązania symboliczne tak, aby były względne względem sshfspunktu montowania, użyj follow_symlinksopcji:

sshfs -o follow_symlinks ...

Ta transform_symlinksopcja nic dla mnie nie robi, zobacz ten problem .

Tom Hale
źródło
poprawna odpowiedź w moim przypadku. Nie widziałem wcześniej plików / folderów z dowiązaniami symbolicznymi, a teraz widzę to i mogę to śledzić.
wyloguj się
1

Widziałem zachowanie, które opisałeś wcześniej, ale testując je teraz, mogę dobrze tworzyć dowiązania symboliczne w katalogu zamontowanym w 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 uaktualniony sshd na pilocie około 4 miesięcy temu. Stara wersja miałaby kilka lat. Być może aktualizacja rozwiązała problem. To może dać wskazówkę co do tego, czego teraz używam:

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

Nie zrobiłem nic, aby zmienić sshfs, z wyjątkiem tego, co Ubuntu robi automatycznie.
HTH.

James K. Lowden
źródło