2013年10月4日 星期五

在 CentOS 6.4 及 Debian GNU/Linux 7 之間使用 sshfs

在 Linux 裡如果要掛載遠端主機的磁碟或目錄,大多數可以使用 NFS 或 Samba。不過 SSHFS (SSH Filesystem) 提供了一個很簡單的方式,只要主機提供有 SSH 服務就可以使用了。我手邊正好各有一台 CentOS 6.4 與 Debian GNU/Linux 7,就拿來試試囉!

在 CentOS 6.4 安裝 SSHFS 套件

在 CentOS 6.4 的套件庫裡並沒有 SSHFS 的套件,爬文後參考了《CentOS 6.x / Debian / Ubuntu: NFS or SMB/CIFS alternative sshfs》這篇文章,得知在 EPEL (Extra Packages for Enterprise Linux) 的套件庫裡有這個套件。然後,又在《[完全用 GNU/Linux 工作] 05. 套件庫及鏡像站》這篇文章裡得知,「請先行安裝 RPMforge 再安裝 EPEL」。

於是,我又找了找 RPMforge 的套件庫,確定它也有 SSHFS 的套件,那麼就決定使用 RPMforge 裡的 SSHFS 套件了。

$ sudo yum -y install fuse fuse-sshfs

Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: ftp.cs.pu.edu.tw
 * extras: mirrors.163.com
 * rpmforge: ftp.riken.jp
 * updates: mirrors.163.com
Setting up Install Process
Package fuse-2.8.3-4.el6.x86_64 already installed and latest version
Resolving Dependencies
--> Running transaction check
---> Package fuse-sshfs.x86_64 0:2.2-1.el6.rf will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package            Arch           Version               Repository        Size
================================================================================
Installing:
 fuse-sshfs         x86_64         2.2-1.el6.rf          rpmforge          44 k

Transaction Summary
================================================================================
Install       1 Package(s)

Total download size: 44 k
Installed size: 103 k
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : fuse-sshfs-2.2-1.el6.rf.x86_64                               1/1
  Verifying  : fuse-sshfs-2.2-1.el6.rf.x86_64                               1/1

Installed:
  fuse-sshfs.x86_64 0:2.2-1.el6.rf

Complete! 

接著,將允許使用 SSHFS 的使用者加到 fuse 這個 group 裡,指令如下:

sudo gpasswd -a $USER fuse

然後,就可以使用 SSHFS 了。此時,要掛載遠端的目錄指令格式如下:

sshfs username@hostname:/directory /yetanotherlocaldirectory

例如,我要掛載遠端 (192.168.1.106) 使用者 online 家目錄裡的 share 目錄到本地端的 working 目錄時,指令如下:

sshfs online@192.168.1.106:/home/online/share ~/working

卸載的指令格式如下:

fusermount -u /directory

例如,我要卸載剛才掛載的那個目錄,指令如下:

fusermount -u working

最後,我在《好用的sshfs》這篇文章得知,SSHFS 是以遠端主機的權限來掛載,所以如果兩端的主機 uid/gid 不一致時,會出現權限錯誤的問題。解決辦法是在掛載時加上指定 uid/gid 的選項。因為我已經將 CentOS 6.4 與 Debian GNU/Linux 7 裡的使用者 uid/gid 改成一樣的,例如 online 這個帳號的 uid/gid 均為 1000,於是掛載指令變成如下:

sshfs -o "uid=1000,gid=1000" online@192.168.1.106:/home/online/share ~/working

在 Debian GNU/Linux 7 安裝 SSHFS 套件

Debian GNU/Linux 7 的套件庫已經收錄了 SSHFS 的套件,因此只要用 apt-get 指令安裝即可。

$ sudo apt-get -y install sshfs

Reading package lists...
Building dependency tree...
Reading state information...
The following NEW packages will be installed:
  sshfs
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/54.8 kB of archives.
After this operation, 147 kB of additional disk space will be used.
Selecting previously unselected package sshfs.
(Reading database ... 119936 files and directories currently installed.)
Unpacking sshfs (from .../archives/sshfs_2.4-1_amd64.deb) ...
Processing triggers for man-db ...
Setting up sshfs (2.4-1) ...

接著,如同 CentOS 6.4 一般,將使用者加入 fuse 這個 group,然後該使用者重新登入後就可以使用 SSHFS 了。

延伸閱讀:

  1. CentOS 的第三方套件庫
  2. 在 CentOS 裡修改使用者帳號的 UID / GID

張貼留言