Unix系列(14)将S端目录mount到C端文件系统中

admin 2024年3月13日14:46:22评论1 views字数 2996阅读9分59秒阅读模式
创建: 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_MACHINESYSTEMCurrentControlSetServicesWebClientParameters]
"BasicAuthLevel"=dword:00000002

BasicAuthLevel缺省为1,需改成2

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

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

\192.168.65.21@8080DavWWWRoot

弹框提示输入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回去看)

原文始发于微信公众号(青衣十三楼飞花堂):Unix系列(14)--将S端目录mount到C端文件系统中

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年3月13日14:46:22
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Unix系列(14)将S端目录mount到C端文件系统中http://cn-sec.com/archives/2572214.html

发表评论

匿名网友 填写信息