Unixでネットワーク越しに他のPCのファイルをマウントする場合は、必然的にNFSになると思います。NFSは80年代から続く枯れたプロトコルであり、初期のLinuxシステムでさえサポートしている程の豊富なバージョンがあります。ところが言い意味でも枯れたプロトコルであるNFSは、インターネット環境において利用するにはセキュリティがほぼ考慮されていないことから、インターネット越しにNFSを使おうとすると、FWを慎重に設定しVPNを張らなければなりません。
SSHプロトコルはSCP/SFTPによるファイル転送をサポートして、ネットワーク越しのファイル送受信にセキュリティを提供しています。セキュアなSSH経由でネットワークの先にあるPCをマウントしてしまうシステムが、SSHFSなのです。しかもSSHFSはクライアントのみでの実装です。サーバ側はSSHサーバさえあれば、特別な操作を必要としません。
SSHFSの実装は2つ有名で、FUSE-SSHFSとshfsがあります。shfsがSSHFSとして先に有名になったのですが、実装が強くLinuxカーネル依存で泥臭いコードだと聞いています。Kernel2.6に迅速に対応できなかったのも、早くから2.6に移行したFedoraにはマイナスでした。
FUSEはFilesystem in Userspace(ユーザ空間ファイルシステム)といい、Fedoraではextrasに含まれています。従来のファイルシステムはカーネルモジュールとして開発されるのですが、カーネルやファイルシステムの内部構造を理解していなければなりませんでした。FUSEフレームワークが提供するシンプルなAPIを通して、カーネルに直接依存しない形でのファイルシステムを提供できる様になります。FUSEのサポートは既にkernel2.4.21で標準に取り込まれており、Linuxカーネル2.4/2.6やFreeBSD6.0などで利用できます。
FUSE-sshfsは、FUSEフレームワークでのSSHFSの実装です。shfsと比べて実装もシンプルです。これからはインターネット越しにあるPCのファイルも、ローカルファイルと同様に扱えるのです。
fuse-sshfsをインストールしてください。たったこれだけです。
# yum install fuse-shfs
ユーザ権限でマウントさせたいなら、補助グループにfuseを追加します。
# usermod -a -G fuse [username]
udev権限で /dev/fuse は、MODE="0660" OWNER="root" GROUP="fuse"で設定されます。詳しい設定はman udevを参照してください。MODE="0666"にすると全ユーザがsshfsを利用できる様になります。
# vi /etc/udev/rules.d/60-fuse.rules
マウントします。ユーザーで行うことが推奨されていますし、デフォルトでsshdはrootでのログインを許可していないはずです。manはありませんがオプションはsshfs --helpで参照することができます。マウント元のディレクトリは、scpコマンドと同じuser@host:dir形式で指定します。SSHの設定次第ですが、シグネチャの確認やパスワードを聞いてきます。
$ sshfs [user@]host:[dir] mountpoint [options]
アンマウントします。fstabに書き込んでないのでfusermountを使います。SSHコネクションが残ってしまうことがあるので、正しくアンマウントやPCの終了を行ってください。
$ fusermount -u mountpoint
まだfuse.confファイルがrpmパッケージには含まれていないようです。元々のリリースに含まれてないのですから、まだそれほど設定項目が多いわけでは無いことが幸いしてるようです。
この警告が出たらuser_allow_otherを追加します。
fusermount: option allow_other only allowed if 'user_allow_other' is set in /etc/fuse.conf
# echo 'user_allow_other' >> /etc/fuse.conf
コマンドを実際に見たいかもしれませんね。こんな感じに組み立てましょう。
$ sshfs weise@****.mmj.jp:/var/share /mnt/ssh -o uid=500,gid=500,allow_other
SSHでログインするのと同じメッセージが流れます。
The authenticity of host '****.mmj.jp (***.***.***.***)' can't be established. RSA key fingerprint is ****. Are you sure you want to continue connecting (yes/no)? yes weise@****.mmj.jp's password:
FUSEバージョン2.4.0から可能になったそうです(FAQより)。頻繁に接続したいホストがあれば登録しておいても便利ですね。Fedora環境を個人ユースで利用しているなら可能ですね。
sshfs#user@host:/ /mnt/host fuse defaults 0 0
fstabを設定したら通常のマウントオプションを使います。
$ mount /mnt/host