有谁知道如何通过 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?
答案1
要将远程绝对(以 开头/
)符号链接转换为相对于sshfs
安装点,请使用以下follow_symlinks
选项:
sshfs -o follow_symlinks ...
这transform_symlinks
选项对我没有任何作用,请参阅这个问题。
答案2
我之前见过您描述的行为,但现在测试它,我可以在 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 $
除了 Ubuntu 自动执行的操作之外,我没有执行任何更改 sshfs 的操作。
HTH。