2007年6月17日

把远程服务挂载成LINUX目录

本文介绍如何利用服务器端的 samba、nfs、ssh、ftp 中任意一个服务,实现远程目录挂载


把远程主机的目录挂载成本地目录的优点是不言而喻的
能够将远程UNIX的目录挂成本地目录,就可以:

1、用VIM编辑程序,而不用再忍受VI的折磨(语法高亮、ctags扩展)
2、在本地写脚本进行文件备份、维护、VCS版本管理
3、所有操作不被远程主机的 .sh_history 记录
4、更直观的文件拷贝操作 cp /mnt/unix/src/hello.c ~/dev/hello.c
5、更多


本人用到的一些方法如下:


1、本人很少用到,但是也是最可能用到的 -- samba

在window遍天下的今天,哪个Linux用户身边没几百个windows用户?
samba服务历史非常悠久,这个就不用多说了。

命令行:
smbmount //192.168.0.100/d /mnt/winshare -o gid=users,uid=biff

或按如下格式写到fstab:
//server/share /media/share smbfs user,username=xx,password=xx,fmask=777,dmask=777 0 0

以后就可以直接用 mount /media/share 加载了 ( 后面不作特别说明都参照本例 )



2、最正统,但是几乎遇不到的 -- nfs

这个也不用多讲了,多讲也无益,除了做实验学习用过几次,十几年没用到过。

命令行:
mount server:/usr/local/pub /home/unixshare
fstab:
server:/usr/local/pub /home/unixshare nfs rsize=32768,wsize=32768,timeo=14,intr



3、绝对实用,程序员必备 -- sshfs

需要fuse sshfs模块,这通常都是本地linux默认安装,只要远程主机提供了ssh服务就可以使用。

命令行:
sshfs user@192.168.0.100:/ /mnt/share
fstab:
sshfs#user@192.168.0.100 : /mnt/share fuse user,noauto,uid=biff,gid=user 0 0
卸载的时候用:
fusermount -uz /mnt/share ( fusermount -u 是卸载 )

建议通过证书进行ssh认证,以后 mount /mnt/share 的时候就不用输入密码了。

sshfs是最棒的,传输加密、工作稳定、不需要在fstab里留明文密码

但是如果管理员仍然老土到让你用telnet,那就只好另寻高招



4、补救手段,有总比没有好 -- ftpfs

虽然本人极力推荐sshfs,但是并不是在每个工作环境都那么好久

管理员不会因为个人的需要而专程到服务器上装个sshserver,但是ftp例外

只要服务端提供了ftp服务,我们还是能偷着乐一把的

命令行:
curlftpfs user:passwd@ftpserver /mnt/ftpshare -o uid=biff,gid=users
fstab:
curlftpfs#user:passwd@192.168.0.100 /mnt/ftpshare fuse rw,user,noauto,uid=biff,gid=users,noauto 0 0


如果你的管理员甚至不给你提供ftp服务(太毒了),那你还是老老实实telnet上去让vi折磨你吧,我也救不了你!


其中方法3、4用到 fuse 模块,这是目前很流行的 user_space mount 方式,
不需要 root 权限就可以将 ssh/ftp/iso/samba/nfs 甚至 gmail 邮箱挂载成本地目录
可以参考这些关键字到google去关注一下:fuse sshfs ftpfs smbfs nfs gmailphs

另外,使用sshfs的过程中遇到个很奇怪的问题,
可以参见前面的文章:Linux下使用 sshfs 挂载 HP-UX 时遇到的巨大BUG

ftpfs目前仍然不稳定,我在连接hp-ux时遇到中文日期不兼容等问题,
可以参见我在 ubuntu bug 提交的出错报告 [ 我的QQ是274980,不过很少在线 ]

没有评论: