将S端目录mount到C端文件系统中

一、原始需求

S、C两台Linux。想在S端执行一个静态ELF,并在C端执行与之配合的程序,将S端指定目录mount到C端文件系统中,使得C端可以只读方式访问mount点。有点类似NFS的需求,但S端比较特殊,不考虑NFS Server在S端布署成功的可能。希望是一批静态ELF在S端执行,对权限控制、写操作无要求。

网上求助后,若干网友提及几种备选方案,包括但不限于sshfs、rclone、dufs。其中sshfs依赖S端sftp服务可用,目标环境S端不满足此要求,但本文记录了sshfs的常规用法。作为WebDAV服务端,dufs比rclone小巧许多,只有3.6MB。作为客户端,rclone支持多种协议,不确认dufs能否用作客户端,本文WebDAV客户端统一用rclone或Windows。本文简单演示了对权限控制、写操作的支持。

二、sshfs

From UID(7575775504)

参看

https://help.ubuntu.com/community/SSHFS

假设S端有SSH服务且从C端可用sftp访问S端:

sftp -4C -P <remote port> <remote user>@<remote ip>

若sftp不可达,sshfs不可用

在C端安装sshfs:

apt install sshfs

在C端挂接mount点:

sshfs -C -o port=<remote port>,idmap=user,dir_cache=yes,reconnect,ServerAliveInterval=5 \
<remote user>@<remote ip>:<remote directory> <local mount point>

在C端卸载mount点:

fusermount3 -u <local mount point>

三、 gvfs

From bluerust

参看gio(1)、gvfs(7)

1) gio+sftp

在C端挂接mount点:

gio mount sftp://<remote user>@<remote ip>:<remote port>/

在C端卸载mount点:

gio mount -u sftp://<remote user>@<remote ip>:<remote port>/

在C端查看mount点:

gio info sftp://<remote user>@<remote ip>:<remote port>/

如下命令可知mount点何在:

本例mount点是”$XDG_RUNTIME_DIR/gvfs/sftp:host=…”。无论”gio mount”是否携带<remote directory>,都将”remote root directory”挂上来,相比之下,sshfs可挂载具体的<remote directory>。

好像”gio mount”无法手工指定<local mount point>,或可”ln -s”建个符号链接出来。

只用sftp协议,gio没啥优势啊。不过gio支持其他协议,比如smb、http、ftp、nfs、dav等等,参看gvfs(7)。

四、rclone

From UID(2031821051)

参看

https://rclone.org/
https://github.com/rclone/rclone

1) webdav

1.1) For Linux

S端

./rclone serve webdav ~/src \
–addr 192.168.65.21:8080 \
–user webdavuser –pass webdavpass \
–vfs-cache-mode writes

C端

./rclone mount \
–webdav-url http://192.168.65.21:8080 \
–webdav-user webdavuser –webdav-pass $(./rclone obscure webdavpass) \
–vfs-cache-mode writes \
:webdav:/ ~/src/mnt

fusermount -u ~/src/mnt

C端不能直接提供明文口令”webdavpass”,必须先用”rclone obscure webdavpass”获取非明文口令,若直接提供明文口令,C端报错。

1.2) For Windows

从Vista开始,Windows的WebClient服务使得资源管理器可直接访问WebDAV资源

假设C端是Win10,为访问S端”rclone serve webdav”,需修改如下注册表项

————————————————————————–
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters]
“BasicAuthLevel”=dword:00000002
————————————————————————–

BasicAuthLevel缺省为1,需改成2

简单点说,S端未用HTTPS,C端BasicAuthLevel为1时无法访问S端。重启WebClient服务使BasicAuthLevel新值生效。

设BasicAuthLevel为2,在C端资源管理器地址栏中访问

\\192.168.65.21@8080\DavWWWRoot

弹框提示输入user/pass,完成认证即可。这是最快捷的C端用法,但有一些互相抄来抄去的文档提及其他操作路径,本质未变。

2) sftp

S端

./rclone serve sftp ~/src \
–addr 192.168.65.21:2022 \
–user sftpuser –pass sftppass \
–vfs-cache-mode writes

C端

./rclone mount \
–sftp-shell-type none \
–sftp-host 192.168.65.21 –sftp-port 2022 \
–sftp-user sftpuser –sftp-pass $(./rclone obscure sftppass) \
–vfs-cache-mode writes \
:sftp:/ ~/src/mnt

fusermount -u ~/src/mnt

五、dufs

From UID(1832267322) & UID(2104719861)

参看

https://github.com/sigoden/dufs

S端

./dufs ~/src \
-b 192.168.65.21 -p 8080 \
-a dufsuser:dufspass@/:rw \
-A \
–log-format=”

C端同rclone

若只是WebDAV的mount需求,dufs相比rclone有个优势,服务端dufs 3.6MB,服务端rclone 56MB,dufs更小巧。

版权声明

本站“技术博客”所有内容的版权持有者为绿盟科技集团股份有限公司(“绿盟科技”)。作为分享技术资讯的平台,绿盟科技期待与广大用户互动交流,并欢迎在标明出处(绿盟科技-技术博客)及网址的情形下,全文转发。
上述情形之外的任何使用形式,均需提前向绿盟科技(010-68438880-5462)申请版权授权。如擅自使用,绿盟科技保留追责权利。同时,如因擅自使用博客内容引发法律纠纷,由使用者自行承担全部法律责任,与绿盟科技无关。

Spread the word. Share this post!

Meet The Author