Twitterに投稿 はてなブックマークに追加 Yahoo!ブックマークに追加 Google Bookmarksに追加

目次 >> SSH >> sshfs

sshfsで遠隔地のディレクトリを安全に共有する

sftpは遠隔地のサーバーのファイルに安全にアクセスする方法である。

sshfsを使うと、sftpを通して遠隔地のサーバのディレクトリをマウントすることができる。

ここではsshfsを使って遠隔地のサーバーのディレクトリをマウントすること、そしてそのマウントしたディレクトリをsambaを使ってローカルネットワーク内からアクセスできるようにする方法を解説する。
これにより、Windowsなどから、通常の共有フォルダと同じような感覚で、遠隔地のサーバ内のフォルダにアクセスできるようになる。
WindowsからVPNを使って直接アクセスするのと比べると、Linux側の設定は必要である者の、Windows側の設定は特に必要ないという利点がある。一方で、外出した際に、カフェなどからアクセスする場合は、VPNに利がある。

インストール

ubuntuの場合

Linux Mintやubuntuの場合は、apt-get install sshfsでインストールする。

$ sudo apt-get install sshfs
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  sshfs
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 41.5 kB of archives.
After this operation, 136 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu/ trusty/main sshfs i386 2.5-1ubuntu1 [41.5 kB]
Fetched 41.5 kB in 1s (24.8 kB/s)
Selecting previously unselected package sshfs.
(Reading database ... 162249 files and directories currently installed.)
Preparing to unpack .../sshfs_2.5-1ubuntu1_i386.deb ...
Unpacking sshfs (2.5-1ubuntu1) ...
Processing triggers for man-db (2.6.7.1-1ubuntu1) ...
Setting up sshfs (2.5-1ubuntu1) ...

これで、

$ sshfs username@example.com: /home/foo /mnt/point

のように打てば、接続できるようになる。

基本的な書式は

$ sshfs ユーザ名@サーバ名:/マウントするディレクトリ /ローカル側のマウントポイント

である。

-pオプションはポート番号を、-Cオプションは圧縮を有効にする

$ sshfs username@example.com:/home/foo /mnt/point -p 22222 -C

ただし、この場合、sambaから接続して、そのマウントしたディレクトリを読むことはできない。それを可能にするには、まず、/etc/fuse.conf内で

user_allow_other

を有効にして、

$ sshfs -o allow_other username@example.com:/home/foo /mnt/point

のように打って接続する。

場合によっては、/etc/groupを開き、fuseとある行に、利用するユーザーを追加する必要があるかもしれない。例えば、foo、booというユーザーを追加するには

fuse:x:106:foo, boo

のように書く。その後再起動を行う。

切断であるが、

$ fusermount -u /mnt/point

のように打つ。

OpenSUSEの場合

suseの場合、

# yast -i sshfs

でインストールする。

マウントは

$ sshfs username@example.com: /home/foo/mnt

の様な形で行う。接続する際に、

fuse: device not found, try 'modprobe fuse' first

というエラーが出る場合は、

$ sudo /sbin/modprobe fuse

と打っておくと、接続できる。

アンマウントは

$ fusermount -u /home/foo/mnt

のように打つ。

CentOS5.2の場合

標準の状態ではyumでsshfsをインストールできないので、RPMforgeリポジトリを使えるようにする。
まず、yum-prioritiesをインストールする。

# yum install yum-priorities
Loading "fastestmirror" plugin
Loading mirror speeds from cached hostfile
* base: www.ftp.ne.jp
* updates: www.ftp.ne.jp
* addons: www.ftp.ne.jp
* extras: www.ftp.ne.jp
Setting up Install Process
Parsing package install arguments
Resolving Dependencies
--> Running transaction check
---> Package yum-priorities.noarch 0:1.1.10-9.el5.centos set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
yum-priorities noarch 1.1.10-9.el5.centos base 11 k

Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)

Total download size: 11 k
Is this ok [y/N]: y
Downloading Packages:
(1/1): yum-priorities-1.1 100% |=========================| 11 kB 00:00
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: yum-priorities ######################### [1/1]

Installed: yum-priorities.noarch 0:1.1.10-9.el5.centos
Complete!

/etc/yum.repos.d/CentOS-Base.repo内の書くセクションの最後に、

priority=1

を追加する。

さらに、GPGキーをインストールし、

# rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt

そしてリポジトリをインストールする。

# rpm -ivh http://apt.sw.be/redhat/el5/en/i386/RPMS.dag/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
Retrieving http://apt.sw.be/redhat/el5/en/i386/RPMS.dag/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
Preparing... ########################################### [100%]
1:rpmforge-release ########################################### [100%]

これで、sshfsをインストールできるようになるので、次のように打つ。

# yum install fuse-sshfs --enablerepo=extras
Loading "fastestmirror" plugin
Loading "priorities" plugin
Loading mirror speeds from cached hostfile
* rpmforge: apt.sw.be
* base: www.ftp.ne.jp
* updates: www.ftp.ne.jp
* addons: www.ftp.ne.jp
* extras: www.ftp.ne.jp
rpmforge 100% |=========================| 1.1 kB 00:00
primary.xml.gz 100% |=========================| 2.8 MB 00:27
rpmforge : ################################################## 7981/7981
base 100% |=========================| 1.1 kB 00:00
updates 100% |=========================| 951 B 00:00
addons 100% |=========================| 951 B 00:00
extras 100% |=========================| 1.1 kB 00:00
321 packages excluded due to repository priority protections
Setting up Install Process
Parsing package install arguments
Resolving Dependencies
--> Running transaction check
---> Package fuse-sshfs.x86_64 0:2.2-1.el5.rf set to be updated
--> Processing Dependency: fuse >= 2.2 for package: fuse-sshfs
--> Processing Dependency: libfuse.so.2(FUSE_2.6)(64bit) for package: fuse-sshfs
--> Processing Dependency: libfuse.so.2()(64bit) for package: fuse-sshfs
--> Processing Dependency: libfuse.so.2(FUSE_2.7)(64bit) for package: fuse-sshfs
--> Processing Dependency: libfuse.so.2(FUSE_2.2)(64bit) for package: fuse-sshfs
--> Processing Dependency: libfuse.so.2(FUSE_2.5)(64bit) for package: fuse-sshfs
--> Running transaction check
---> Package fuse.x86_64 0:2.7.4-1.el5.rf set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
fuse-sshfs x86_64 2.2-1.el5.rf rpmforge 50 k
Installing for dependencies:
fuse x86_64 2.7.4-1.el5.rf rpmforge 257 k

Transaction Summary
=============================================================================
Install 2 Package(s)
Update 0 Package(s)
Remove 0 Package(s)

Total download size: 307 k
Is this ok [y/N]: y
Downloading Packages:
(1/2): fuse-2.7.4-1.el5.r 100% |=========================| 257 kB 00:03
(2/2): fuse-sshfs-2.2-1.e 100% |=========================| 50 kB 00:00
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: fuse ######################### [1/2]
Installing: fuse-sshfs ######################### [2/2]

Installed: fuse-sshfs.x86_64 0:2.2-1.el5.rf
Dependency Installed: fuse.x86_64 0:2.7.4-1.el5.rf
Complete!

ところが、これでmodprobe fuseとすると、

# modprobe fuse
FATAL: Module fuse not found.

の様にエラーになってしまう。
そこで、dkms-fuseもインストールする

# yum install dkms-fuse
Loading "fastestmirror" plugin
Loading "priorities" plugin
Loading mirror speeds from cached hostfile
* rpmforge: fr2.rpmfind.net
* base: www.ftp.ne.jp
* updates: www.ftp.ne.jp
* addons: www.ftp.ne.jp
* extras: www.ftp.ne.jp
321 packages excluded due to repository priority protections
Setting up Install Process
Parsing package install arguments
Resolving Dependencies
--> Running transaction check
---> Package dkms-fuse.noarch 0:2.7.4-1.nodist.rf set to be updated
--> Processing Dependency: dkms for package: dkms-fuse
--> Running transaction check
---> Package dkms.noarch 0:2.0.20.4-1.el5.rf set to be updated
--> Processing Dependency: kernel-devel for package: dkms
--> Running transaction check
---> Package kernel-devel.x86_64 0:2.6.18-92.1.22.el5 set to be installed
--> Finished Dependency Resolution

Dependencies Resolved

=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
dkms-fuse noarch 2.7.4-1.nodist.rf rpmforge 70 k
Installing for dependencies:
dkms noarch 2.0.20.4-1.el5.rf rpmforge 61 k
kernel-devel x86_64 2.6.18-92.1.22.el5 updates 5.0 M

Transaction Summary
=============================================================================
Install 3 Package(s)
Update 0 Package(s)
Remove 0 Package(s)

Total download size: 5.1 M
Is this ok [y/N]: y
Downloading Packages:
(1/3): dkms-2.0.20.4-1.el 100% |=========================| 61 kB 00:02
(2/3): kernel-devel-2.6.1 100% |=========================| 5.0 MB 00:04
(3/3): dkms-fuse-2.7.4-1. 100% |=========================| 70 kB 00:01
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: kernel-devel ######################### [1/3]
Installing: dkms ######################### [2/3]
Installing: dkms-fuse ######################### [3/3]

Installed: dkms-fuse.noarch 0:2.7.4-1.nodist.rf
Dependency Installed: dkms.noarch 0:2.0.20.4-1.el5.rf kernel-devel.x86_64 0:2.6.18-92.1.22.el5
Complete!

そして、

# modprobe fuse

と打ち、マウントは

$ sshfs username@example.com: /home/foo/mnt

の様な形で行う。

アンマウントは

$ fusermount -u /home/foo/mnt

のように打つべし。

接続が切れた際に、自動的に再接続するようにする

何らかの原因で、接続が切れてしまったときに、自動的に再接続するには、autosshを使うとよい。

まず、autosshをインストールする。ubuntuでは、

$ sudo apt-get install autossh
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  linux-headers-2.6.38-8-generic screen-resolution-extra
  linux-headers-2.6.38-8 dkms
Use 'apt-get autoremove' to remove them.
The following NEW packages will be installed:
  autossh
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 27.5 kB of archives.
After this operation, 143 kB of additional disk space will be used.
Get:1 http://us.archive.ubuntu.com/ubuntu/ natty/universe autossh amd64 1.4b-4 [27.5 kB]
Fetched 27.5 kB in 0s (37.3 kB/s)
Selecting previously deselected package autossh.
(Reading database ... 165280 files and directories currently installed.)
Unpacking autossh (from .../autossh_1.4b-4_amd64.deb) ...
Processing triggers for man-db ...
Setting up autossh (1.4b-4) ...

そして、接続する際に、ssh_command=autosshをオプションに加えてやればよい。

$ sshfs username@example.com: /home/foo/mnt -o ssh_command=autossh

起動時にマウントする

まず、上記のように手動でマウントできる状態であると仮定する。
次に、sshでのログインは公開鍵認証を使い、パスワードなしでログインできるようにしておく。
そして、/etc/fstabにマウントコマンドを記述する。
具体的には、

foo@example.com:/home/foo/sharedir /mnt/point  fuse.sshfs auto,_netdev,users,IdentityFile=/home/foo/.ssh/id_rsa,allow_other,reconnect,delay_connect,umask=0000 0 0

_netdevはネットワークが準備できるまで待つというものであるが、うまくいかなかったので、さらに待つ、delay_connectを追加している。
sambaなどで共有した際、フォルダの作成はできるが削除ができなかったりする場合があるときは、umaskを指定してやる。
IdentityFile=/home/foo/.ssh/id_rsaはプライベートキーの場所を指定している。
先にも述べた通り、allow_otherがないとsambaでの共有はうまくいかない。

ポート番号(port=22222)、データ通信の圧縮(compression=yes)を指定することもできる。

foo@example.com:/home/foo/sharedir /mnt/point  fuse.sshfs auto,_netdev,users,IdentityFile=/home/foo/.ssh/id_rsa,allow_other,reconnect,port=22222,compression=yes,delay_connect,umask=0000 0 0

このディレクトリ(/mnt/point)をsambaで共有すると、LAN内のパソコンから、遠隔地のサーバのファイルにアクセスできる。


最終更新日


本文中のFC4はFedora ProjectのFedora Core 4を、FC5はFedora Core 5を、FC6はFedora Core 6をopenSUSEはNovellのSUSE Linux OSSを表します。Fedora7以降は、単にFedora7、Fedora8、Fedora9、Fedora10、Fedora11、Fedora12、Fedora13、Fedora14、Fedora15と表示しています。Ubuntuは、必要に応じて17.04、18.04のようにバージョン番号をつけて区別しています。

ここに登場するドメイン名やIPアドレスなどはフィクションです。実在の人物・団体等とは一切関係がありません。
実際に使用する際は、各自の環境に合わせて書き換えてください。
もし何か間違いなどありましたらこちらからご連絡ください
リンクに許可は不要です。
Copyright (C) 2014 Chikuma Engineering Co., Ltd. All Rights Reserved.