Debian下通過SSHFS/SHFS掛載遠程檔案

來源:互聯網
上載者:User

 

我嘗試的是第一種方法,要注意的是遠端主機.ssh/authorized_keys需要通過手勢ssh-keygen產生。前面比較順利,但是,開機自啟動依然沒有配置成功。

開機啟動沒有做成功,去密碼過後直接在主資料夾做了一個可執行檔,執行即可。

 

#/bin/sh

#

# mountsshfs Mount SSH filesystems.

#

# Version: @(#)mountsshfs 1.00-1 15-Apr-2005 andot@ujn.edu.cn

#

 

PATH=/sbin:/usr/sbin:/bin:/usr/bin

export PATH

 

#

# Mount SSH file systems in /etc/sshfstab.

#

echo -n "Mounting SSH filesystems..."

sshfs leon@192.168.19.105:/home/leon /home/leon/serviceleon

echo "done"

 

: exit 0

 

 

大家可能知道並用過在linux上通過smb,nfs來進行遠程檔案系統的共用,可是大家是否知道我們現在還可以通過ssh來進行遠程檔案系統的共用。你可能會說這有什麼希奇的,不就是ssh遠程登入嘛,再不就是sftp或者scp之類的方式,總之,這些東西熟的不能再熟了。可是我在這裡要說的可不是這些東西,我要說的是通過sshfs來將遠程主機的檔案系統掛載到本地,之後就可以像使用本地檔案系統一樣使用遠程檔案系統了。看到這裡,大家是否覺得有興趣了呢?接下來讓我們看看到底怎麼來作到這點。

實際上,使用sshfs掛載遠程主機的方法還不只一種,目前我知道的方法有三種,第一種是通過基於lufs的sshfs子系統來完成,第二種是通過基於fuse的sshfs程式來完成,而第三種直接通過核心支援的shfs模組就可以了。經測試,通過第二種方法來掛載的遠程主機檔案系統比第一種方法要穩定的多,而第三種方法是最簡單也是跟系統接合最好的。第一種方法如果跟autofs來配合,可以更方便的掛載遠程檔案系統,不過在這樣掛載的檔案系統上直接開啟歌曲或者電影之類的檔案可能有些問題,我在以這種方式掛載的系統上聽歌時,如果再對這個檔案系統上的其他檔案進行操作,歌曲就會停止播放。而通過後兩種方法掛載的系統就沒有這個問題。所以我們這裡只說明後兩種方法。第一種方法大家如果有興趣可以自己研究。

這裡以debian系統來作說明是因為我使用的系統是debian,我沒有在其他linux系統上做過實驗,但其他linux系統應該也是可以的。

一、通過sshfs掛載遠程主機檔案系統

首先,需要下載sshfs,這一步很簡單:

# apt-get install sshfs

另外它是基於fuse模組的,所以必須要保證你的核心模組裡已經有了這個模組,debian系統的核心預設是沒有編譯這個模組的,不過安裝這個模組在debian下很簡單,首先下載fuse的源碼包和工具包以及編譯需要用到的程式。

# apt-get install fuse-source fuse-utils 
debconf-utils debhelper dpatch gettext 
html2text intltool-debian po-debconf devscripts 
kernel-package dpkg-dev module-assistant

設定環境變數:

# export KVERS=$(uname -r)

# export KSRC=/usr/src/kernel-headers-$KVERS

下載核心標頭檔:

# apt-get install kernel-headers-$KVERS

現在進入/usr/src內可以找到標頭檔和fuse模組的源碼包,然後我們解壓編譯。

# cd /usr/src

# tar jxvf fuse.tar.jz

編譯fuse模組:

# cd /usr/src/modules/fuse

# debian/rules binary_modules

好,完成編譯,編譯完的debian包可以在/usr/src/modules/(或者/usr/src/)中找到。

安裝剛剛編譯的fuse模組。

# dpkg -i /usr/src/modules/fuse*.deb

好了現在第一步完成了。下面可以測試一下是否可以使用sshfs了。

首先建立一個掛載點(這裡我以remotehost這個名字為例,你可以使用任何你喜歡的名字):

# mkdir /mnt/remotehost

 

然後可以試試是否可以掛載遠程主機檔案系統了。首先我們要有一台可以通過ssh遠程登入的機器,假設這台機器是192.168.1.1吧,它不需要作什麼設定,只要保證它ssh服務是開啟的,我們就可以掛載它的檔案系統了。

# sshfs root@192.168.1.1:/ /mnt/remotehost -o 
sshfs_sync -o default_permissions,allow_other,
allow_root,kernel_cache,hard_remove

現在它可能會提示輸入密碼,輸入ssh登入時需要的遠程主機的root帳號密碼就可以了。現在看一下是否掛載好了。

# cd /mnt/remotehost
# ls

如果掛載成功,現在應該可以看到遠程機器的檔案了。而且你如果使用X Window,你還可以通過檔案管理工具來瀏覽查看檔案,就象使用本地硬碟一樣方便了。

卸載檔案系統也很簡單,只需要輸入:

# umount /mnt/remotehost

就可以了。怎麼樣,不錯吧?

怎麼,你還覺得麻煩?是啊,現在每次都要通過命令列才能掛載,卸載,而且每次還都要輸入密碼,我也覺得好麻煩啊。如果能在開機時自動掛載,關機重啟時自動卸載就方便了。別著急,下面我來介紹一種方法來實現這個願望。此法乃原創,不足之處希望大家批評指正。

首先要解決的是怎樣免去輸入密碼這一步,這個簡單,在debian參考手冊的9.5.3節──用更少的密碼建立串連中可以查到。這裡就不轉載了。這裡只就這個例子來說明一下。

首先要保證192.168.1.1上的/etc/ssh/sshd_config中設定了”PubkeyAuthentication yes”然後在本地以root帳號執行以下操作,之所以使用root帳號是因為掛載檔案系統時需要用root帳號。

# ssh-keygen -t rsa
# cat ~/.ssh/id_rsa.pub 
| ssh root@192.168.1.1 "cat - >>.ssh/authorized_keys"

這裡第一條命令執行時,可能讓你輸入passphrase,保留為空白直接斷行符號就可以了。而執行第二條命令時,需要輸入遠程系統root帳號的密碼,這時必須輸入正確的密碼才能成功。

現在可以試試我們上面的操作是否起作用了。

# ssh root@192.168.1.1

如果不要求輸入密碼就已經登入了遠程系統的話,那麼恭喜你,成功了!現在退回到你自己的系統來繼續完成下面最重要的工作吧,建立自動啟動指令碼。

進入/etc/init.d目錄,建立下面兩個檔案。

第一個檔案是mountsshfs,下面是檔案內容。

#!/bin/sh
#
# mountsshfs Mount SSH filesystems.
#
# Version: @(#)mountsshfs 1.00-1 15-Apr-2005 andot@ujn.edu.cn
#

PATH=/sbin:/usr/sbin:/bin:/usr/bin
export PATH

#
# Mount SSH file systems in /etc/sshfstab.
#
echo -n "Mounting SSH filesystems..."
if [ -f /etc/sshfstab ] ; then
( cat /etc/sshfstab ; echo ) | sed -e '/^#/d' -e '/^$/d' | (
while read host mount_point sshfs_options fuse_options
do
sshfs $host $mount_point -o $sshfs_options -o $fuse_options
done
)
fi
echo "done"

: exit 0

第二個檔案是umountsshfs,下面是檔案內容。

#!/bin/sh
#
# umountsshfs Unmount SSH filesystems.
#
# Version: @(#)umountsshfs 1.00-1 15-Apr-2005 andot@ujn.edu.cn
#

PATH=/sbin:/usr/sbin:/bin:/usr/bin
export PATH

#
# Unmount SSH file systems in /etc/mtab.
#
echo -n "Unmounting SSH filesystems..."
if [ -f /etc/mtab ] ; then
( cat /etc/mtab ; echo ) | sed -e '/^#/d' -e '/^$/d' | (
while read host mount_point options
do
if echo $host | awk '{ if ( substr($0, 1, 6) 
== "sshfs#" ) exit 0; else exit 1 }' ; then
umount $mount_point
fi
done
)
fi
echo "done"

: exit 0
 
好了,接下來到/etc目錄下來建立一個sshfstab,這個檔案功能跟fstab類似,不過這裡面只包含需要開機是掛載的sshfs檔案系統,而不包括其他檔案系統的資訊。我們還是以上面的例子來建立這個檔案:

# /etc/sshfstab: SSH file system information.
#
# <[user@]host:[dir]> 
root@192.168.1.1:/ /mnt/remotehost sshfs_sync 
default_permissions,allow_other,allow_root,
kernel_cache,hard_remove

這個檔案中要掛載的系統可以包含多行,其中掛載點必須保證已經建立,上面的啟動指令碼中不包含建立掛載點這步。

好了現在可以用:

# /etc/init.d/mountsshfs

來掛載所有的sshfs遠程檔案系統了。然後用:

# /etc/init.d/umountsshfs

可以卸載所有已掛載的sshfs遠程檔案系統。現在我們要把它添加到啟動裡面去。在/etc/rc0.d,/etc/rc6.d中分別建立一個指向/etc/init.d/umountsshfs的軟串連,注意軟串連的名字關係到執行順序。

# cd /etc/rc0.d
# ln -s ../init.d/umountsshfs S15umountsshfs
# cd /etc/rc6.d
# ln -s ../init.d/umountsshfs S15umountsshfs

在/etc/rc2.d,/etc/rc3.d,/etc/rc4.d,/etc/rc5.d中分別建立一個指向/etc/init.d/mountsshfs的軟串連,注意軟串連的名字關係到執行順序。

# cd /etc/rc2.d
# ln -s ../init.d/mountsshfs S85mountsshfs
# cd /etc/rc3.d
# ln -s ../init.d/mountsshfs S85mountsshfs
# cd /etc/rc4.d
# ln -s ../init.d/mountsshfs S85mountsshfs
# cd /etc/rc5.d
# ln -s ../init.d/mountsshfs S85mountsshfs

好了。現在重新啟動機器就可以了發現遠程檔案系統現在已經成了你的“本地”檔案系統了!

二、通過shfs掛載遠程主機檔案系統

前面介紹的那種方法雖然可以在開機自動掛載,關機和重啟可以自動卸載sshfs檔案系統了,但是它不能用mount來直接指定-t參數來掛載,因此也不能直接加到/etc/fstab種,而且用df也不能列出那樣的分區,所以你可能希望如果能像掛載普通分區那樣掛載sshfs檔案系統就好了。這也不是不可能的,下面介紹的這種方法就可以滿足我們這個願望,它是通過核心的shfs模組來實現的,它支援2.4.10以上和2.6的核心。這種方式我認為是最方便的。下面我們就看看怎麼來使用它。

首先你要保證你的系統已經安裝了shfs模組,如果你是預設的debian核心,它是沒有這個模組的,但是不用著急,我們可以跟上面編譯fuse模組那樣去編譯這個shfs模組,方法類似。因此下面只列出命令,不再詳細解釋了。

# apt-get install shfs-source shfs-utils debconf-utils 
debhelper dpatch gettext html2text intltool-debian 
po-debconf kernel-package module-assistant

# export KVERS=$(uname -r)

# export KSRC=/usr/src/kernel-headers-$KVERS

# apt-get install kernel-headers-$KVERS

# cd /usr/src

# tar jxvf shfs.tar.jz

# cd /usr/src/modules/shfs

# debian/rules binary_modules

# dpkg -i /usr/src/modules/shfs*.deb

好了,現在shfs模組已經編譯安裝好了,現在可以直接用mount命令來掛載分區了。

# mount -t shfs root@192.168.1.1:/ /mnt/remotehost -o rmode=755,preserve

這裡假設/mnt/remotehost目錄已經按照前面那種方法建好了。現在可以跟上面一樣使用/mnt/remotehost來存取遠程主機的檔案系統了,是不是很方便啊?

好了,如果想要開機掛載,關機重啟卸載就更方便了。首先還是要做免去ssh登入密碼輸入這步,這同上面那種方法中介紹的一樣,這裡就不在重複了。下面假設這步工作已經完成了,然後只需要修改一下/etc/fstab就可以了。而不再需要自己去編寫什麼mountsshfs,umountsshfs指令碼,也不在需要建立/etc/sshfstab這個檔案了。

root@192.168.1.1:/ /mnt/remotehost shfs rmode=755,preserve 0 0

添加上面這行到/etc/fstab中,就可以直接開機掛載了,關機和重啟卸載了,非常簡單。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.