在进行 Linux 服务器保护时,文件治理始终是一个比拟辣手的问题:FTP/SMB/WebDAV 装置步骤繁琐,且用户权限等配置也较为简单,最重要的是以上几种传输协定默认都是不加密的,配置加密等操作又要付出额定的工夫与精力。OpenSSH 自带的 SFTP 能做到开箱即用,且自带加密,但 SFTP 毕竟只是文件传输协定,在 Linux 下咱们能够应用 sshfs 配合 FUSE 将其作为磁盘挂载,在 Windows 下同样有 sshfs-win 帮忙咱们实现这一性能。本文将为读者解说 sshfs-win 的原理、装置、应用以及应用过程中一些须要留神的细节。
本文原载于未命名小站,由作者自己同步至知乎,转载请注明原作者博客地址或本链接,谢谢!
0x01 sshfs-win 原理介绍
Windows 下的 sshfs-win 与 Linux 下的 sshfs 原理基本一致,即它们都是建设在用户空间文件系统的根底上的利用。
sshfs 将 SFTP 协定转换为 FUSE 的接口,FUSE 再将这一接口以文件系统的形式裸露给内核;而 sshfs-win 则将 SFTP 协定转换为 WinFSP(Windows 文件系统代理)提供的接口,WinFSP 所做的事件大抵能够列举为以下三件:
- 注册一个设施驱动,让 Windows 可能挂载它
- 实现 NT 内核下 CreateFile、ReadFile、WriteFile 等 API,治理读写队列
- 调用挂载到 WinFSP 上应用程序对应的 FUSE 接口
Windows 的内核扩大与驱动程序非常复杂,因而为 Windows 开发内核态文件系统须要比在 Linux 下开发内核态文件系统更多的精力,而 WinFSP 作为 FUSE 接口到 Windows 文件系统的桥梁(这就是名字里代理的由来),能以更加全面与残缺的 API,以及对 FUSE 良好的兼容性,升高文件系统开发的难度。
WinFSP 的具体原理与机制能够参考 WinFSP 的文档,此处不再赘述,接下来咱们开始解说如何装置与应用依赖 WinFSP 的 sshfs-win。
0x02 sshfs-win 装置与应用
上文提到,sshfs-win 依赖 WinFSP,因而咱们要首先装置 WinFSP:https://github.com/billziss-gh/winfsp。
WinFSP 装置完结后,咱们再装置 sshfs-win:https://github.com/billziss-gh/sshfs-win。
两者都装置结束后,咱们在 Windows 的文件资源管理器中点击『映射网络驱动器』:
在弹出的对话框中,咱们选定须要赋予的盘符,而后在文件夹中输出如下内容:
\\sshfs\ 用户名 @IP 地址! 端口号
须要留神的是这里端口号不是咱们通常应用的:
,而是!
,点击实现后,输出用户名对应的明码即可连贯胜利。
0x03 一些须要留神的细节
只管 sshfs-win 的操作较为简单,但如果你想做更多操作,就会发现各种各样奇奇怪怪的『BUG』,因而这一节笔者将为大家列举两个须要留神的细节。
1. 如何挂载子目录
默认状况下,咱们在输出第二节提到的连贯串后,会将用户的家目录映射到 Windows 中,如果咱们只是为了治理网站目录、做做备份或者是作为 NAS 应用,可能须要挂载其余子目录,但这时咱们可能会发现,应用如下的连贯串会导致连贯时呈现『地位不可用』的报错:
\\sshfs\ 用户名 @IP 地址! 端口号 \home
这是因为连贯串中的门路是以用户家目录为参考的相对路径,即如果咱们须要映射 /home
目录,则须要应用如下连贯串
\\sshfs\ 用户名 @IP 地址! 端口号 \..\..\home
其中 ..\
的数量须要依据理论状况决定,这样就能胜利映射到咱们所需的目录
这样的形式很容易造成误会,也让连贯串变得复杂,因而 sshfs-win 反对另一种更为扼要的连贯串语法:
\\sshfs.r\ 用户名 @IP 地址! 端口号 \home
这里的 r
指的是 root
,即默认从根目录挂载而非家目录,这样就无需应用俊俏的..\
回到根目录,咱们能够间接从根目录开始,输出绝对路径来挂载咱们所需的文件夹。
其实除了 sshfs.r
以外,还有其余的一些连贯串规定能帮忙 sshfs-win 变得更加不便,具体能够参考:https://github.com/billziss-gh/sshfs-win#unc-syntax。
2. 如何勾销挂载
笔者在应用 sshfs-win 的时候,经常出现无奈卸载盘符的状况,无论通过文件资源管理器右键断开连接,还是通过 cmd 执行 net use 盘符: /delete
操作,均会在提醒卸载胜利后发现盘符仍旧存在。
依据这篇 Issue:billziss-gh/sshfs-win#119,这可能是因为和其余应用程序的抵触引起。抵触可能不便解决,但咱们能够利用上文形容过的原理,即 WinFSP 为 sshfs 提供反对,从 WinFSP 的角度下手解决这个问题。
咱们关上命令提示符(或者 PowerShell,取决于你的爱好),定位目录到 WinFSP 的装置目录,默认应该是C:\Program Files (x86)\WinFsp\bin\
,而后执行如下命令:
.\launchctl-x64.exe list
这时它会列出正在运行的挂载工作,如下图:
这里能够看到,第一个挂载工作的语法存在谬误,这可能是导致它无奈失常勾销挂载的起因,这时候咱们能够执行如下命令来勾销挂载:
.\launchctl-x64.exe stop sshfs root@xxx...
命令执行胜利后,咱们关上文件资源管理器就会发现之前无奈勾销挂载的盘符曾经胜利隐没。
0x04 其余的替代品
只管 sshfs-win 简略间接,但如果读者须要更多功能(如图形界面、缓存等),就须要其余的替代品来实现同样的性能。这里笔者举荐几款替代品:
- rclone:一款号称『挂载任何存储服务』的跨平台开源软件,反对范畴之广从 Amazon S3 到 Google Drive,或者是更为传统的 FTP、SFTP,甚至内存!rclone 提供了超过 30 种存储指标,并提供充沛的自定义选项反对,能够实现缓存、权限等简单配置。美中不足的是 rclone 并未提供图形界面,而在 Windows 下编写服务配置文件较为简单,因而该软件适宜有较多自定义需要的用户应用。
- raidrive: raidrive 绝对比 rclone 最大的特色就是提供了图形界面反对,能够更不便地治理挂载目录,但这是一款商业软件,收费套餐只反对较少的挂载指标,也无奈反对缓存等高级性能。
相似的软件还有很多,如 SFTP Drive 等,读者能够依据本人的需要筛选适宜本人的软件。
须要留神的是,这些软件的原理大多相似,其中还有不少是基于 WinFSP 的二次开发,因而在性能和稳定性方面,它们是相差不多的。