在进行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所做的事件大抵能够列举为以下三件:

  1. 注册一个设施驱动,让Windows可能挂载它
  2. 实现NT内核下CreateFile、ReadFile、WriteFile等API,治理读写队列
  3. 调用挂载到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的二次开发,因而在性能和稳定性方面,它们是相差不多的。