sshfs memecah symlink dari server SFTP

16

Adakah yang tahu cara memasang jalur SFTP jarak jauh melalui SSHFS sehingga Anda dapat bekerja dengan symlink? Ketika saya melakukan ini, semua symlink yang saya buat menunjuk ke file yang salah (bukan yang saya tautkan.) Semua symlink yang saya minati relatif (tidak absolut) sehingga memiliki mereka muncul persis seperti yang mereka lakukan pada mesin remote akan menjadi ideal.

Menggunakan sshfs dengan opsi mount standar, saya tidak dapat membuat symlink ke file lain di direktori saat ini:

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

Yang jelas salah, karena target tautan ada di direktori saat ini ( ./test), tetapi di sini Anda dapat melihat bahwa sshfs membuat tautan /testyang salah - target tautan /mnt/path/to/sshfs/mount/testtidak /test.

Dengan menambahkan transform_symlinksopsi ketika saya me-mount sistem file sshfs, saya mendapatkan tautan relatif alih-alih dengan perintah yang sama, tetapi masih menunjuk ke tempat yang salah:

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

Di sini saya mencoba menautkan ke ./testdalam direktori saat ini, tetapi sebaliknya saya mendapat tautan ke ../../../testtiga level di atas!

Namun, menghubungkan dengan klien baris perintah SFTP sftpalih-alih pemasangan dengan sshfs bekerja:

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

Jadi ini memberitahu saya server SFTP jauh berfungsi dengan baik (karena saya dapat membuat symlink dengan klien SFTP khusus), tetapi untuk beberapa alasan saya tidak dapat membuat symlink yang berfungsi meskipun sshfs.

Anehnya, ketika saya menggunakan sshfs untuk me-mount path pada server SSH yang menyediakan akses shell (sebagai lawan dari server SFTP-only) symlinks berfungsi dengan baik - saya dapat membuatnya dengan benar. Tampaknya hanya bermasalah ketika terhubung ke server khusus SFTP.

Apa yang saya lakukan salah? Apakah ada opsi khusus yang harus saya berikan ke sshfs ketika saya terhubung ke server SFTP untuk membuat symlink berfungsi?

Malvine
sumber
Saya tidak mengerti pertanyaan Anda: sshfs selalu menggunakan SFTP. Apa yang Anda maksud dengan “via ssh bukannya sftp”? Sepertinya Anda mengalami masalah dengan satu server SFTP tertentu. Jika Anda menggunakan klien SFTP, apa yang ditampilkannya ketika Anda menjalankan ls -lsymlink pengujian Anda?
Gilles 'SO- berhenti bersikap jahat'
Maaf, ketika saya katakan sftpdalam huruf kecil maksud saya antarmuka baris perintah SFTP, yaitu /usr/bin/sftp. Contoh terakhir saya di posting adalah ketika saya membuat symlink menggunakan klien SFTP ini, seperti yang Anda minta.
Malvineous
Aku masih tidak tahu apa maksudmu. Harap edit posting Anda untuk mengklarifikasi apa yang Anda lakukan secara lokal, apa yang Anda lakukan di atas sshfs mount tanpa transform_symlinksopsi, apa yang Anda lakukan di atas ssh mount dengan transform_symlinksopsi, dan apa yang Anda lakukan dengan klien sftp. Symlinks berfungsi dengan normal pada SSHFS, jadi jawaban untuk kalimat pertama Anda adalah "tidak ada" - apakah Anda telah menemukan bug atau Anda tidak mengetik perintah yang benar, tetapi pelaporan Anda terlalu jelas untuk mengetahui apa yang salah.
Gilles 'SO- berhenti bersikap jahat'
Saya telah mencoba mengklarifikasi apa yang saya minta sebaik mungkin, tetapi saya tidak begitu yakin apa yang Anda cari karena pertanyaannya tampak jelas bagi saya. Jika masih belum jelas, tolong jelaskan kepada saya bagian mana yang tidak masuk akal dan mengapa, dan saya akan mencoba untuk fokus pada bit-bit itu. Semoga pertanyaan Anda sekarang dijawab.
Malvineous

Jawaban:

13

Untuk mentransformasikan /symlink absolut jauh (dimulai dengan ) menjadi relatif ke sshfstitik mount, gunakan follow_symlinksopsi:

sshfs -o follow_symlinks ...

The transform_symlinkspilihan tidak apa-apa bagi saya, lihat masalah ini .

Tom Hale
sumber
jawaban yang benar dalam kasus saya. Saya tidak melihat file / folder yang disinkronkan sebelumnya, dan sekarang saya melihatnya dan saya bisa mengikutinya.
logoff
1

Saya telah melihat perilaku yang Anda jelaskan sebelumnya, tetapi mengujinya sekarang saya dapat membuat symlink dengan baik pada direktori yang dipasang 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)

Saya meningkatkan sshd pada remote sekitar 4 bulan yang lalu. Versi lama mungkin sudah beberapa tahun. Mungkin pembaruan memperbaiki masalah. Ini mungkin memberikan beberapa petunjuk tentang apa yang saya gunakan sekarang:

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

Saya belum melakukan apa pun untuk mengubah sshfs, kecuali apa yang dilakukan Ubuntu secara otomatis.
HTH.

James K. Lowden
sumber