一、原始需求
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)申请版权授权。如擅自使用,绿盟科技保留追责权利。同时,如因擅自使用博客内容引发法律纠纷,由使用者自行承担全部法律责任,与绿盟科技无关。