sshfs中断来自SFTP服务器的符号链接


16

有谁知道如何通过SSHFS挂载远程SFTP路径,以便可以使用符号链接?当我这样做时,我创建的所有符号链接都指向错误的文件(不是我链接的文件)。我感兴趣的所有符号链接都是相对的(不是绝对的),因此让它们看起来与在远程计算机上完全一样理想。

使用带有默认安装选项的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在提供Shell访问权限的SSH服务器上安装路径(相对于仅SFTP的服务器)时,符号链接可以正常工作-我可以正确创建它们。仅当连接到仅SFTP的服务器时,这才似乎有问题。

我究竟做错了什么?当我连接到SFTP服务器以使符号链接正常工作时,是否必须传递给sshfs特殊的选项?


我不明白您的问题:sshfs始终使用SFTP。“通过ssh而不是sftp”是什么意思?您似乎在使用一台特定的SFTP服务器时遇到了麻烦。如果使用SFTP客户端,则ls -l在测试符号链接上运行时会显示什么?
吉尔(Gilles)'所以

抱歉,我sftp用小写字母表示命令行SFTP界面,即/usr/bin/sftp。我在帖子中的最后一个示例是,当您根据要求使用此SFTP客户端进行符号链接时。
Malvineous

我仍然不知道你的意思。请编辑您的帖子,以阐明您在本地正在执行的操作,不带transform_symlinks选项的sshfs挂载的操作,带选项的ssh挂载的操作transform_symlinks以及sftp客户端的操作。符号链接确实可以通过SSHFS正常运行,因此第一句话的答案是“无”-遇到错误或没有键入正确的命令,但是您的报告仍然不清楚,以至于不知道什么地方出了问题。
吉尔(Gilles)“所以,别再邪恶了”

我已尽力澄清我的要求,但我不确定您要什么,因为这个问题对我来说似乎很清楚。如果仍然不清楚,请具体告诉我哪些部分没有意义以及原因,我将尝试着重于这些内容。希望您的问题现在得到回答。
恶意

Answers:


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)

大约4个月前,我在远程服务器上升级了sshd。旧版本可能已有数年历史了。也许升级解决了这个问题。这可能会为我现在使用的内容提供一些线索:

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

除了Ubuntu会自动执行的操作外,我没有做任何更改sshfs的操作。
HTH。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.