sshfs прерывает символические ссылки с SFTP-сервера

16

Кто-нибудь знает, как смонтировать удаленный путь SFTP через SSHFS, чтобы вы могли работать с символическими ссылками? Когда я делаю это, все созданные мной символические ссылки указывают на неправильные файлы (не те, на которые я ссылался). Все символические ссылки, которые меня интересуют, являются относительными (не абсолютными), поэтому их отображение будет точно таким же, как на удаленной машине быть идеальным

Используя sshfs с параметрами монтирования по умолчанию, я не могу создать символическую ссылку на другой файл в текущем каталоге:

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

Что, очевидно, неверно, так как цель ссылки находится в текущем каталоге ( ./test), но здесь вы можете видеть, что sshfs создает ссылку на /testкоторую неверно - цель ссылки - /mnt/path/to/sshfs/mount/testнет /test.

Добавляя transform_symlinksпараметр при монтировании файловой системы sshfs, я получаю относительную ссылку вместо этой же команды, но она все равно указывает на неправильное место:

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

Здесь я попытался сделать ссылку ./testв текущем каталоге, но вместо этого я получил ссылку на ../../../testтри уровня выше!

Однако соединение с SFTP-клиентом sftpиз командной строки вместо монтирования с помощью sshfs работает:

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

Это говорит о том, что удаленный SFTP-сервер работает нормально (поскольку я могу создавать символические ссылки с выделенным SFTP-клиентом), но по какой-то причине я не могу создать какие-либо рабочие символические ссылки через sshfs.

Как ни странно, когда я использую sshfs для монтирования пути на SSH-сервере, обеспечивающем доступ к оболочке (в отличие от SFTP-сервера), символические ссылки работают нормально - я могу создать их правильно. Это кажется проблематичным только при подключении к SFTP-серверу.

Что я делаю неправильно? Есть ли особая опция, которую я должен передать sshfs при подключении к SFTP-серверу, чтобы заставить работать символические ссылки?

Malvineous
источник
Я не понимаю ваш вопрос: sshfs всегда использует SFTP. Что вы подразумеваете под «через ssh вместо sftp»? Похоже, у вас проблемы с одним конкретным SFTP-сервером. Если вы используете SFTP-клиент, что он показывает при запуске ls -lваших тестовых символических ссылок?
Жиль "ТАК - перестань быть злым"
К сожалению, когда я говорю , sftpв нижнем регистре , я имею в виду SFTP интерфейс командной строки, то есть /usr/bin/sftp. Мой последний пример в посте - когда я делаю символическую ссылку, используя этот SFTP-клиент, как вы и просили.
Malvineous
Я до сих пор понятия не имею, что вы имеете в виду. Пожалуйста, отредактируйте ваш пост, чтобы уточнить, что вы делаете локально, что вы делаете с монтированием sshfs без transform_symlinksопции, что вы делаете с монтированием ssh с transform_symlinksопцией, и что вы делаете с клиентом sftp. Симлинки работают нормально по SSHFS, поэтому ответом на ваше первое предложение будет «ничего» - либо вы столкнулись с ошибкой, либо не набираете правильные команды, но ваши отчеты слишком неясны, чтобы понять, что не так.
Жиль "ТАК - перестань быть злым"
Я пытался уточнить, что я прошу, как могу, но я не совсем уверен, что вы после того, как вопрос кажется мне ясным. Если это все еще неясно, пожалуйста, скажите мне конкретно, какие части не имеют смысла и почему, и я постараюсь сосредоточиться на этих битах. Надеюсь, теперь на ваши вопросы ответили.
Malvineous

Ответы:

13

Чтобы преобразовать удаленные абсолютные (начиная с /) символические ссылки относительно sshfsточки монтирования, используйте follow_symlinksпараметр:

sshfs -o follow_symlinks ...

transform_symlinksОпция ничего не делает для меня, увидеть эту проблему .

Том Хейл
источник
правильный ответ в моем случае. Я не видел символические файлы / папки раньше, и теперь я вижу это и могу следить за ним.
выход
1

Я видел поведение, которое вы описали ранее, но теперь, тестируя его, я могу просто создать символические ссылки в каталоге, смонтированном в 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)

Я обновил sshd на пульте около 4 месяцев назад. Старой версии было бы несколько лет. Возможно, обновление решило проблему. Это может дать некоторое представление о том, что я использую сейчас:

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

Я не сделал ничего, чтобы изменить sshfs, кроме того, что Ubuntu делает автоматически.
НТН.

Джеймс К. Лоуден
источник