Mal*_*ous 20 sftp mount symlink sshfs
有谁知道如何通过 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
Run Code Online (Sandbox Code Playgroud)
这显然是不正确的,因为链接目标在当前目录 ( ./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
Run Code Online (Sandbox Code Playgroud)
在这里,我试图链接到./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
Run Code Online (Sandbox Code Playgroud)
所以这告诉我远程 SFTP 服务器工作正常(因为我可以使用专用的 SFTP 客户端创建符号链接),但由于某种原因,我无法通过 sshfs 创建任何有效的符号链接。
奇怪的是,当我使用 sshfs 在提供 shell 访问的 SSH 服务器上挂载路径(而不是仅使用 SFTP 的服务器)时,符号链接工作正常 - 我可以正确创建它们。只有在连接到仅限 SFTP 的服务器时才会出现问题。
我究竟做错了什么?当我连接到 SFTP 服务器以使符号链接工作时,是否必须传递给 sshfs 的特殊选项?
Tom*_*ale 18
要将远程绝对(以 开头/)符号链接转换为相对于sshfs挂载点,请使用以下follow_symlinks选项:
sshfs -o follow_symlinks ...
Run Code Online (Sandbox Code Playgroud)
该transform_symlinks选项对我没有任何作用,请参阅此问题。
我之前见过您描述的行为,但现在测试它,我可以在 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)
Run Code Online (Sandbox Code Playgroud)
大约 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 $
Run Code Online (Sandbox Code Playgroud)
除了 Ubuntu 自动执行的操作之外,我没有执行任何更改 sshfs 的操作。
HTH。