在 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 了。
延伸閱讀:
- CentOS 的第三方套件庫
- 在 CentOS 裡修改使用者帳號的 UID / GID