sshfs的配置

上个月新买了一个本本电脑,所以女人的旧电脑就算淘汰下来了。但我还得用我那07年的老爷机,在做开发上还是有些吃力,因此决定把原来共存于同一个系统的桌面环境和服务器环境分开,将服务器环境转移到淘汰下来的老爷机上,所以在上面装了个FreeBSD,以方便维护。但也因此出现一个问题,服务器的数据应该放在哪里,桌面机上还是服务器机器上。由于淘汰下来的机器可能会被我用来折腾,如挨个装发得版,或测试其它东西,所以我想把数据还是放在桌面机上;问题又来了,服务器如何能快速有效地访问这些数据,而不影响服务器的正常运作呢。

首先,想到的是用netbeans的远程站点功能。随后,又想到了利用 ssh 挂载远程文件系统的功能,把 Desktop 上的文件系统通过 sshfs 挂载到 Server 上。由于第一种方案需要依赖netbeans,所以我打算用第二种方案。

一、安装配置 SSHFS

安装 sshfs ,这个在 Arch 下用 pacman 安装即可,其它发行版应该都有相应的包管理器可以解决。在安装好 sshfs 之后,可以使用 # sshfs [USER]@[HOST]:[DIR] [MOUNTPOINT] [OPTIONS] 挂载远程的文件系统,使用 # fusermount -u [MOUNTPOINT] 进行卸载。当然,前提是远程系统上有 ssh daemon 运行。另外一个比较有用的参数是 -o allow_other,否则挂载的文件系统只有当前用户可用,其他用户无法访问。这样,就可以像操作本地文件一样来操作远程文件了。

二、实现 SSHFS 开机自动挂载

2.1 配置 ssh 的自动登录

首先切换到 root 用户,这样比较方便,避免了用户权限上的麻烦,虽然可能有安全性的问题,但毕竟是自己的电脑。

接着,用 ssh-keygen ,生成 dsa 密钥对,为了实现自动挂载,所以这里不要输入密钥密码短语(passphrase),这样我们就得到了 id_dsa 和 id_dsa.pub 这两个密钥文件。

最后,用 ssh-copy-id -i id_dsa.pub [HOST]把 id_dsa.pub 这个文件上传到远程系统去,如果远程系统改变了默认的 ssh 端口,则使用 ssh-copy-id -i id_dsa.pub ‘-p [PORT] [HOST]’ 即可。这样我们就可以直接使用 ssh [HOST] 来登录远程系统而不需要密码了。

这个方法之所以可以免除密码的关键在于我们生成了一对没有 passphrase 的密钥对,但是如果在之前生成密钥对时输入了 passphrase,则还是需要密码的。所以,这是一个取巧的方式,有一定的安全隐患,如果需要更加安全的免密码的方式,可以使用 ssh-agent1

2.2 配置 sshfs 开机自动挂载

在 /etc/fstab 中添加 sshfs#root@host:[dir] mountpoint fuse defaults,auto,allow_other,port=PORT 0 0,这样就可以实现自动挂载了。

最后,用 mount -a 试试看有没有成功。

参考资料

  1. 配置ssh的自动登录
  2. RSA/DSA authentication on SSH
  3. 老外经验谈使用sshfs装备远程文件系统
  4. sshfs把远程主机的文件系统映射到本地的目录中
  5. IBM Developer — OpenSSH 密钥管理,第 1 部分
  6. IBM Developer — OpenSSH 密钥管理,第 2 部分


  1. 关于这部分可以仔细研读参考资料里“IBM Developer — OpenSSh 密钥管理”这部分的内容。