sshfs 用多了后感觉还是有一些局限性,比如它是建立在 ssh 协议之上的,一些环境并不方便用 ssh,并且它的延迟也比较高。于是我打算找一个更快更方便的协议来替换它,我马上想到可以给远程服务器建立一个 NFS 来提供给用户,这样我可以通过更通用的工具来访问它。

于是在 github 上我搜到 abobe 开发的一个 samba server,由于 samba 是一个很经典的网络文件系统协议,所以各个系统中都可以很方便地使用:https://github.com/adobe/node-smb-server

具体的安装方法是。

npm install node-smb-server

或者

git clone https://github.com/adobe/node-smb-server.git
cd node-smb-server
npm install

在 config.json 中有配置信息,其中的 shares 中可以配置多种文件系统的协议,我只用本地文件系统,所以只保留了 FS,并把 path 指向我需要的位置。

 "shares": {
    "FS": {
      "backend": "fs",
      "description": "fs-based test share",
      "path": "./smbroot"
    },
    "JCR": {
      "backend": "jcr",
      "description": "AEM-based test share",
      "host": "localhost",
      "port": 4502,
      "protocol": "http:",
      "auth": {
        "user": "<user>",
        "pass": "<pwd>"
      },
      "path": "/",
      "maxSockets": 64,
      "contentCacheTTL": 30000,
      "binCacheTTL": 600000
    },

在 users 字段下可以配置登陆的用户名与密码,默认有 test/test, admin/admin, guest/<empty password>,如果要修改密码,可以运行 node createhash.js <password> 来生成对应密码的 lmHash 和 ntlmHash:

...
"users" : {
    "test" : {
      "lmHash" : "01fc5a6be7bc6929aad3b435b51404ee",
      "ntlmHash" : "0cb6948805f797bf2a82807973b89537"
    },
    "admin" : {
      "lmHash" : "f0d412bd764ffe81aad3b435b51404ee",
      "ntlmHash" : "209c6174da490caeb422f3fa5a7ae634"
    },
    "guest" : {
      "lmHash" : "aad3b435b51404eeaad3b435b51404ee",
      "ntlmHash" : "31d6cfe0d16ae931b73c59d7e0c089c0"
    }
  }
...

运行 smb 服务器方法是输入命令:

npm start

我在这个项目中目前只测试了 MacOS 中挂载 smb 服务器,finder -> Go -> Connect to Server 然后在 url 栏中填入 smb://<ip>:port/,点击 connect 即可。

命令行中可以用 mount_smbfs //user:pass@SERVER/folder ./mntpoint 执行挂载,卸载的方式也很简单,umount ./mntpoint