sshfs把远程主机的文件系统映射到本地的目录中

来源:互联网 发布:淘宝销量下滑原因分析 编辑:程序博客网 时间:2024/05/29 11:14


sshfs把远程主机的文件系统映射到本地的目录中

授权方式:署名,非商业用途,保持一致,转载时请务必以超链接(http://www.fwolf.com/blog/post/329)的形式标明文章原始出处和作者信息及本声明。

windows之外的世界比想像中要大得多呢,几乎天天都在用ssh,却到今天才知道有sshfs这个好东西,前几天还在为ZendStudio可以远程编辑文件欣喜,惭愧啊,终于有比vi scp://hostname//path/to/file更方便的方式了。

sshfs,就是可以把ssh连接到的主机资源,映射到本机的文件系统当中,然后用户可以像操作本地文件一样操作,而实际的文件改动将通过ssh传 输到远程主机当中。类似于mount了一个windows共享目录,或者另外一台linux主机的samba共享,或者是nfs共享,只是“共享协议”变 成了ssh通道罢了。

ubuntu源中已经包含了sshfs了,以及所需的fuse包,直接apt安装就可以了,一共是三个包:“fuse-utils libfuse2 sshfs”,不大,加起来才179k。安装的时候会自动创建用户组fuse,要使用sshfs的用户需要先加到这个用户组里才行(记得完成后还要重新登 录),不然会没有权限执行fusermount:

  fuse: failed to exec fusermount: Permission denied

使用就简单的多了,一般来说,连接远程主机到本地用户:

  sshfs user@hostname:path mount_point

需要输密码就输密码,当然配置成自动登录的ssh更方便了。用完之后要umount,可以:

  fusemount -u mount_point

都是在普通用户非sudo的环境下使用,非常方便的。如果想每次开机都自动挂载,可以在/etc/fstab中加入:

  sshfs#user@hostname:path mount_point fuse defaults,auto,allow_other 0 0

这就要求必须先把ssh自动登录配置好了,让root用户能够使用user身份登录远程主机,另外allow_other这个参数很重要,没有这个参数的话,挂载过来的目录只有root能够访问。

关于自动挂载,参考文章中andot用脚本实现的方式也不错,建议大家看看去。

关于自动挂载,参考文章中andot用脚本实现的方式也不错,建议大家看看去。

参考:

  • 老外经验谈使用sshfs装备远程文件系统
  • SSH入门
  • 在debian下通过sshfs/shfs挂载远程主机文件系统
  • Home Server
  • FUSE简介
  • FUSE:用户空间文件系统
  • Mounting a fuse Filesystem from /etc/fstab

挂载到本地的远程主机目录

  2. 如何开始?

  你必须在 /mnt 目录下建立相关的挂载点,简单来说就是建立一个可读写的目录,并且使用 sshfs 讲远程主机的硬盘,分区或目录挂载到此目录下,以实现对远程主机文件系统的简单访问和操作。

  3. 安装软件

  sudo apt-get install sshfs fusemount

  4. 实例操作

   在此实例中,我们需要将远程主机 "192.168.1.218" 上的“/home”挂载到本地系统的“/mnt/server218” 下,我们已经具备了挂载前的一切必须条件:拥有"192.168.1.218"的账号 “human”和密码,并且218主机提供了ssh访问。

  新建目录“server218”并赋予其读写权限:

  sudo mkdir /mnt/server218
  sudo chmod 777 /mnt/server218

  开始挂载:

  sshfs human@192.168.1.218:/home/ /mnt/server218/
  sshfs 用户名@远程主机IP:远程主机路径 本地挂载点 ##用法解释

          -o transform_symlinks -o follow_symlinks  ## 挂载时的符号链接

  在提示下输入218主机的human账号的密码,挂载成功!

  现在打开本地 /mnt/server218 看看,Oh,yeah!那就是218主机的home目录,现在你可以对目录下的文件进行新建,复制,粘贴,删除...等等各种操作,就像是自己的硬盘!

  卸载:

  fusemount -u mount_point
  fusemount -u 本地挂载目录 #卸载命令

  5. 后续问题:

   以上操作(除了安装软件) 都是在普通用户非sudo的环境下使用,非常方便,但是笔者在使用的过程中也发现了一些问题,例如远程主机失去响应后本地挂载点卡死并影响本地系统使用, 需要手工找出 sshfs进程并杀死,因网速问题造成操作响应缓慢等等,不过一般在稳定快速的网络中不太会遇上,对比其强大的功能,还是可以接受的,正所谓暇不掩瑜。


最近我需要(事实上,不只是需要)从我的笔记本上设置远程服务器。问题是服务器的文件系统是NFS,因此我觉得在服务器上设置我的本地文件夹比在笔记本上的某个位置设置会来得简单些。确实这样做很简单,但是当我这样设置后,在我的本地文件夹中的所有文件都是由我的笔记本中不存在的用户所拥有的。我记起来以前我是这样解决这个问题的:设置NFS时,建立一个系统中的ID与另一个系统中的ID的映射关系。用Google搜了半天“idmap”,我没有找到这么做的详细资料,尤其缺乏针对我只拥有客户端ID这种情况的资料。

后来一个朋友推荐我使用sshfs。(太感谢了,迈克尔!)基本上,如果你能通过SSH来访问服务器,那么你就可以在那个服务器上设置文件夹并且在本地访问这个文件夹。我需要做的就是在我的Ubuntu笔记本上安装“sshfs”工具包。sshfs使用FUSE,因此它会安装所有它需要的FUSE附件。

我用如下的命令来设置远程服务器:

sudo sshfs {{user id}}@{{server hostname}}:{{desired remote share}} {{desired local mount point}} -o idmap=user -o allow_other -o uid={{local user id}} -o gid={{local group id}}

这段命令不只设置了远程共享,用uid和gid选项它还可以解决了用户ID与你指定的ID不匹配的问题。如果两台机器间的网络连接状况很好的话,该设置性能非常好。但是当我在家里的服务器(用DSL连接)上设置文件夹时,它滞后地非常明显。我认为当你可以通过SSH访问远程服务器的时候,使用sshfs是设置该服务器的非常好的选择。即使你没有用户id/主机不匹配这类问题,它那优良的性能也应当是你不错的选择。如果有人只在客户端就可以解决NFS用户ID不匹配问题,我很乐意学习一下!


///////////////////////////////////////////////////////////////////////////////////////////////////

实际使用:

ubuntu 10.04

sudo apt-get install sshfs fusemount

只装了sshfs,安装fusemount不上,也可以使用

然后直接挂载

sudo mkdir /mnt/server218

sudo chmod 777 /mnt/server218

开始挂载:

sshfs human@192.168.1.218:/home/ /mnt/server218/

卸载

fusemount -u /mnt/server218/


原创粉丝点击