Unix系列(14)--将S端目录mount到C端文件系统中
2024-3-12 18:33:43 Author: mp.weixin.qq.com(查看原文) 阅读量:2 收藏

创建: 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回去看)


文章来源: https://mp.weixin.qq.com/s?__biz=MzUzMjQyMDE3Ng==&mid=2247487224&idx=1&sn=3e9dc4747d68c2bfd3f6aa8b5d683072&chksm=fab2cdc7cdc544d1a85f42cc55a4c13c4bb6031822adeb8b5a825839756f675c46e7e1114a13&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh