无法使用 sshfs 在特定本地目录中挂载任何内容

use*_*462 5 mount sshfs

我用来sshfs在本地挂载远程目录。我在 VirtualBox 虚拟机中使用 Xubuntu 16.04。昨天,当一切都挂载时,我保存了虚拟机的状态并关闭了它;我今天早上重新加载了保存的状态。我相信我使用虚拟机的事实与解决问题并不真正相关(因为它以前发生过一次并且我设法修复了它,我只是不记得是如何解决的),但我添加它是为了解释腐败是如何发生的可能已经发生了。

现在在使用的本地目录上不会挂载任何东西,该命令将永远不会返回。我可以将远程服务器上的任何目录安装在本地机器的其他目录中,但在我昨天使用的目录中不会安装任何目录。我已经重新启动了 Xubuntu 机器,并将其完全关闭,但无济于事。我也重新启动了远程服务器。我也可以通过 SSH 连接到远程服务器。

我已确保在有问题的目录 (fusermount -u problematic_directorysudo umount -l problematic_directory) 中没有安装任何内容。

下表总结了情况(original_dir是我平时挂载的目录;arbitrary_dir是其他目录):

LOCAL             REMOTE            WORKS
original_dir  <-- original_dir      NO
arbitrary_dir <-- original_dir      YES
original_dir  <-- arbitrary_dir     NO
arbitrary_dir <-- arbitrary_dir     YES
Run Code Online (Sandbox Code Playgroud)

这表明我的本地机器配置错误,因为远程机器似乎并不关心我安装了哪个目录。

没有关于original_dirin 的信息/proc/mounts,我已经删除并重新创建了(空)目录,但没有任何改变。

我也删除sshfsopenssh-client重新安装了它,也没有运气。

在调试模式下运行命令的输出:

$ sshfs -o debug,sshfs_debug,loglevel=debug,idmap=user me@remoteip:/home/me/project-share /home/me/project-share/
SSHFS version 2.5
FUSE library version: 2.9.4
nullpath_ok: 0
nopath: 0
utime_omit_ok: 0
executing <ssh> <-x> <-a> <-oClearAllForwardings=yes> <-ologlevel=debug> <-2> <me@remoteip> <-s> <sftp>
Run Code Online (Sandbox Code Playgroud)

它永远这样挂着。

成功挂载的输出如下所示:

$ sshfs -o debug,sshfs_debug,loglevel=debug,idmap=user me@remoteip:/home/me/project-share /home/me/another-dir/
SSHFS version 2.5
FUSE library version: 2.9.4
nullpath_ok: 0
nopath: 0
utime_omit_ok: 0
executing <ssh> <-x> <-a> <-oClearAllForwardings=yes> <-ologlevel=debug> <-2> <me@remoteip> <-s> <sftp>
debug1: Reading configuration data /home/me/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to remoteip [remoteip] port 22.
debug1: Connection established.
debug1: identity file /home/me/.ssh/id_rsa type 1
...
debug1: Offering RSA public key: /home/me/.ssh/id_rsa
debug1: Server accepts key: pkalg rsa-sha2-512 blen 279
debug1: Authentication succeeded (publickey).
Authenticated to remoteip ([remoteip]:22).
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: pledge: network
debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
debug1: Sending environment.
debug1: Sending env LANG = en_US.UTF-8
debug1: Sending subsystem: sftp
Server version: 3
Extension: posix-rename@openssh.com <1>
...
Run Code Online (Sandbox Code Playgroud)

不幸的是,我不能在本地使用其他挂载点,因为我需要本地和远程目录的路径相同,并且不能更改远程目录的路径。

编辑:我找到了一种解决方法:将远程目录安装在另一个目录中,然后创建original_dir为符号链接:

$ mkdir ~/original_dir_mnt_point
$ sshfs -o idmap=user me@REMOTE_IP:~/original_dir ~/original_dir_mnt_point/
$ ln -s ~/original_dir_mnt_point/ ~/original-dir
Run Code Online (Sandbox Code Playgroud)

但是,这仅在我们调用时未创建符号链接时才有效,sshfs因此每次重新安装时都需要重新创建符号链接。不过,我仍然想正确解决这个问题。

小智 0

共享文件或文件夹需要额外的驱动程序“插入来宾添加 CD 映像选项”是克服虚拟机阻止文件传输的一种方法。


小智 0

我有同样的问题。这个问题困扰了我一天,不过现在解决了。它挂起来就像

$ sshfs -p 22 admin@127.0.0.1:/home/admin/fileShare/dart/2.5.0/dart-sdk 
$HOME/dockerSahreFile/dart-sdk -o allow_other -o debug -o sshfs_debug
 SSHFS version 2.10
 FUSE library version: 2.9.7
 nullpath_ok: 0
 nopath: 0
 utime_omit_ok: 0
 executing <ssh> <-x> <-a> <-oClearAllForwardings=yes> <-oPort=22> <-2> <admin@127.0.0.1> <-s> <sftp>
Run Code Online (Sandbox Code Playgroud)

和其他输出工作,如

 $ sshfs -p 22 admin@127.0.0.1:/home/admin/fileShare/dart/2.5.0/dart-sdk $HOME/otherDockerSahreFile/dart-sdk -o allow_other -o debug -o sshfs_debug
Run Code Online (Sandbox Code Playgroud)

有时,我会多次执行它,例如:

diskutil umount force $HOME/dockerSahreFile/dart-sdk
 or 
 diskutil unmount force $HOME/dockerSahreFile/dart-sdk
Run Code Online (Sandbox Code Playgroud)

这个问题就解决了。