创建: 2024-03-07 09:45
修改: 2024-03-12 15:12
https://scz.617.cn/unix/202403070945.txt目录:
☆ 原始需求
☆ sshfs
1) 使用示例
2) idmap
☆ gvfs
1) gio+sftp
☆ rclone
1) webdav
1.1) For Linux
1.2) For Windows
2) sftp
☆ dufs
☆ 其它(未测试)
☆ 原始需求
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 root directory"挂上来,相比之下,sshfs可挂载具体的。
好像"gio mount"无法手工指定,或可"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
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
☆ 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更小巧。
(完整版自己拖TXT回去看)