sftpは遠隔地のサーバーのファイルに安全にアクセスする方法である。
sshfsを使うと、sftpを通して遠隔地のサーバのディレクトリをマウントすることができる。
ここではsshfsを使って遠隔地のサーバーのディレクトリをマウントすること、そしてそのマウントしたディレクトリをsambaを使ってローカルネットワーク内からアクセスできるようにする方法を解説する。
これにより、Windowsなどから、通常の共有フォルダと同じような感覚で、遠隔地のサーバ内のフォルダにアクセスできるようになる。
WindowsからVPNを使って直接アクセスするのと比べると、Linux側の設定は必要である者の、Windows側の設定は特に必要ないという利点がある。一方で、外出した際に、カフェなどからアクセスする場合は、VPNに利がある。
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
のように打つ。
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
のように打つ。
標準の状態では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内のパソコンから、遠隔地のサーバのファイルにアクセスできる。
最終更新日