十年前,业界流行用samba/ftp/nfs互访windows/linux
今天,可以通过ssh挂载任何Linux目录,变成windows下一个native驱动器(驱动级加载,真正native,不是模拟出来的,其他方式的局限性下文解释)
要实现挂载,windows上运行一个程序即可(源码/编译好的程序见文末),而Linux上没有任何要求( 因为ssh是Linux标配)
试想一个使用场景:2台电脑,一个win一个linux, windows上visual studio, mingw, eclipse.../linux上openoffice,eclipse..
如果可以通过网络2个环境可以像使用本地文件一样,打开和编译代码、文档,跨平台代码立马编译运行,DEBUG,岂不妙哉?
一般性的解决方案无外乎这样几种:
linux装samba,变成windows共享目录,需要装很多包,若以后需要挂多台LINUX,岂不是个个都要装SAMBA?况且我另外一台电脑是Gentoo,需要多很多包,意味着编译很多代码,可以达到目的但不符合我KISS风格
用NFS互访。 Linux上NFS开服务,windows挂载成网络驱动器,或者windows开NFS服务,Linux直接mount。
但是windows上native的方式是安装file service组件(我的windows是2008 R2),做NFS服务器时windows是不支持UTF-8的,意味着linux下挂载的中文目录文件名无法正确显示,用haneWIN NFS Server可以解决这些,但是跟原有的file service组件不能同时存在,因为nfs需要rpc,而rpc在file service是在windows服务注册保护的,当然,windows下的老鸟可以手动干掉bind 111端口的rpc服务,不过这样就把系统的nfs server搞残了。从Linux挂到windows上没问题,但反过来,windows上NFS挂Linux,总遇到权限问题,挂载但无法访问,试过了注册表修改nfs client anonymousUid等等,no luck用sftp挂载驱动器到windows上,目前这样最简单,系统依赖最小。 对Linux来讲,只需要SSH服务开启,无需任何其他服务。
在开始折腾之前,先定需求:
- 速度快,几千个文件/目录列表,不要让人等半天
- 可以save每个driver的profile,支持mount多个drivers
- 像模像样的块文件系统,不要什么在EXPLORER EXTENSION出来,又或者MOUNT成NETWORK MAPPING这样的映射驱动器,因为我要用TRUECRYPT之类的驱动级工具,其他高层次的“驱动器”,在TRUECRYPT加载时是不可见的!
试用了无数,靠谱的如下:
DirectNet Drive : 免费,驱动级,符合要求,sftp/ftp/webdav都支持,而且可以用http/socks代理,版本1.2.5(2010.11)后就不维护了,但问题是,我只需要用sftp,而且它的BUG是无论如何也不能指定sftp的目录,统统是从/下mount
http://www.directnet-drive.net/
Sftp Net Drive : 免费,驱动级,功能非常强大,人家是专门做文件系统的,Net Drive只是个副产品,完全满足需求,还有其他高级选项(加载成各种驱动器类型),但是免费版只能加载一个驱动器,收费版给钱才给提供下载,搜不到收费版,更别说破解版了。
https://www.eldos.com/sftp-net-drive/
ExpanDrive,收费,应用级,找了个2.4.0破解版,功能类似Sftp Net Drive般丰富,可惜速度慢(因为我文件目录比较多),在TRUECRYPT中不可见,不过一般应用是没问题,特别是有需要把s3/ftp等等映射成本地驱动器的,推荐使用。
http://www.expandrive.com
Dokan : 开源,fuse在windows上的一个实现,驱动级。 有很大自由发挥余地。 但是其他文件系统模块需要自己写,比如需要sftp需要自己实现,工作量大。 外围有人写了个DokanSSHFS,BUG比较多,删除目录时,竟然不能删除子录!
另外的实现win-sshfs,2012年5月提交一次代码后就没更新了,删除文件目录,而后刷新又出现了!
http://code.google.com/p/win-sshfs/
http://github.com/apaka/win-sshfs
由于暂时找不到替代品,只好把代码check下来,修修补补,现在可以用了。
ssh用的是.net的实现 虽然不是c而是csharp的,但性能应该不会太差(比Expandrive用的python实现ssh好多了)。
老的win-sshfs用的SSH.NET Library是2010年的版本,让我给换成最新代码开发库的rev 34720版本了
http://sshnet.codeplex.com/SourceControl/list/changesets
修复的BUG:
修复了缺少盘符“Z”
修复了git不能在映射盘上使用
修复了在目录下右键不能创建其他文件
修复file locking相关API(ms office打开.doc文件/svn/hg需要调用LockFile/UnLockFilGetFileSecurity)
使用方法:
- Linux sftp服务器需要打开密码验证,确保/etc/ssh/sshd_config中“PasswordAuthentication”为“yes”,重启sshd
- 打开sshfs.exe,点add,新建一个profile,填写IP,端口,用户名,密码,目录,盘符,点保存
- 点Mount按钮,如果顺利的话系统就会增加一个驱动器,并且Mount按钮会变成Unmount
Enjoy!
项目源代码:http://github.com/truthtracer/sshfs4win.git
编译好的可执行程序(csharp实现):http://download.csdn.net/detail/truthtracer/7071881 (CSDN更新资源不方便,建议自行编译源代码得到最新的版本)
Report Bus via : TruthTracer@gmail.com