Ubuntu で sshfs を使う
Ubuntu環境でsshfs (SSH Filesystem) を利用し、SSHプロトコルを通じてリモートサーバー上のファイルシステムをローカルマシンにマウントする方法を解説します。sshfsを使うと、リモートのファイルをローカルファイルのように直接扱うことができ、ファイル転送の手間を省き、開発や作業の効率向上が期待できます。
記事中の <ユーザ名> や <リモートマシン名> といったプレースホルダーは、ご自身の環境に合わせて適切な値に置き換えてください。例えば、<ユーザ名> はローカルマシンのログインユーザー名に置き換えます。
sshfs のインストール
Ubuntu 環境でのインストール手順は以下の通りです。
# パッケージリストの情報を更新
sudo apt update
sudo apt -y install sshfs
mount 操作の例
まず、マウントポイントとなるローカルディレクトリを作成します。ホームディレクトリ以下など、一般ユーザーが書き込み権限を持つ場所を推奨します (例: mkdir ~/remote_files)。ここでは例として /mnt を使用します。
mkdir /mnt
次に、作成したマウントポイントの所有者を操作ユーザーに変更します。<ユーザ名> はご自身のユーザー名 ($USER 環境変数も利用可) に置き換えてください。
chown <ユーザ名> /mnt
sshfsは FUSE (Filesystem in Userspace) フレームワークを利用するため、一般ユーザーがマウント操作を行うには、そのユーザーを fuse グループに追加する必要があります。<ユーザ名> はご自身のユーザー名に置き換えてください。このコマンド実行後、グループ変更を反映するために再ログインが必要な場合があります。
sudo gpasswd -a <ユーザ名> fuse
準備が整ったら、sshfs コマンドでリモートディレクトリをマウントします。<リモートマシンのユーザ名>@<リモートマシン名>:/directory をリモートサーバーの情報に、/mnt を先ほど作成したローカルのマウントポイントパスに置き換えてください。
主要なオプション:
-o intr: ファイルシステム操作が応答しなくなった場合に、シグナルによる中断を許可します。-o sshfs_sync: 同期書き込みモードで動作します。データの整合性は高まりますが、書き込みパフォーマンスが低下する可能性があります。-o reconnect: (後述の自動接続で利用) 接続が切断された場合に自動再接続を試みます。
sshfs -o intr -o sshfs_sync <リモートマシンのユーザ名>@<リモートマシン名>:/directory /mnt
セキュリティに関する注意: パスワード認証ではなく、より安全な公開鍵認証の使用を強く推奨します。事前にローカルマシンで ssh-keygen コマンドを使って鍵ペアを作成し、ssh-copy-id コマンドなどで公開鍵をリモートサーバーの ~/.ssh/authorized_keys に登録しておいてください。
unmount 操作の例
マウントしたファイルシステムを解除 (アンマウント) するには、fusermount コマンドを使用します。
fusermount -u /mnt
自動接続スクリプトの例
シェルログイン時などに、sshfsのマウント状態を確認し、未マウントの場合に自動で再マウントするための簡単なスクリプト例です。.bashrc や .profile などに記述すると、新しいシェルが起動するたびに実行されます。
このスクリプトの動作概要:
- 一時ファイル
/tmp/www_doneが存在しない場合 (初回起動時など)、sshfsでマウントし、目印として同ファイルを作成します。初回マウント時から-o reconnectオプションを付与しています。 - 一時ファイルが存在する場合、マウント先の特定ファイル (ここでは
index.html) の存在を確認します。 - ファイルが存在しない場合 (マウントが切れていると判断)、
-o reconnectオプション付きで再マウントを試みます。このオプションは接続断時の自動再接続試行を有効にします。
注意点:
/tmpディレクトリの内容はシステム再起動時に消去される可能性があります。- ファイル存在チェックによるマウント確認は簡易的なものであり、確実ではありません。
- 以下のスクリプト例は
hoge@www.hoge.com:/var/wwwを/home/ubuntuuser/wwwにマウントする想定です。ご自身の環境に合わせてユーザー名、ホスト名、パス等を変更してください。
if [ ! -f /tmp/www_done ]; then
# 初回マウント (-o reconnect を追加)
sshfs -o reconnect -o intr -o sshfs_sync hoge@www.hoge.com:/var/www /home/ubuntuuser/www
touch /tmp/www_done
else
if [ ! -f /home/ubuntuuser/www/index.html ]; then
# 再マウント (-o reconnect は接続断時の自動再接続試行)
sshfs -o reconnect -o intr -o sshfs_sync hoge@www.hoge.com:/var/www /home/ubuntuuser/www
fi
fi
【重要】セキュリティに関する警告:
このスクリプト例自体は認証情報を扱いませんが、いかなる場合でも自動化スクリプト内にSSHパスワード等の認証情報を直接記述することは絶対に避けてください。これは深刻なセキュリティリスクとなります。
sshfsをスクリプト等で利用する場合は、前述の通り、パスワード入力が不要な公開鍵認証を必ず設定してください。
(補足) より安定した、あるいはシステム起動時からの自動マウントが必要な場合は、.bashrc への記述ではなく、systemd の automount ユニット機能の利用を検討すると良いでしょう。
まとめ
この記事では、Ubuntu で sshfs をインストールし、リモートディレクトリをマウント・アンマウントする基本的な手順と、簡単な自動接続スクリプトの例を紹介しました。sshfs を活用することで、リモートファイルへのアクセスをよりシームレスに行えます。
トラブルシューティングと参考情報
- マウントに失敗する場合: まずリモートサーバーへの通常のSSH接続 (
ssh ユーザ名@リモートホスト) が成功するか確認してください。 fuseグループへの追加後: グループ変更の反映には再ログインが必要な場合があります。- パーミッションエラーが発生する場合: ローカルのマウントポイントディレクトリの所有権・パーミッション設定、およびリモートサーバー側のファイルやディレクトリのパーミッション設定を確認してください。
sshfs のさらに詳細なオプションや機能については、ターミナルで man sshfs コマンドを実行し、公式マニュアルを参照してください。