Ubuntu で sshfs を使う
Ubuntu環境でsshfs (SSH Filesystem) を利用し、SSHプロトコルを通じてリモートサーバー上のディレクトリをローカルマシンにマウントする方法を解説します。sshfsを使うと、リモートのファイルをローカルのファイルと同じ操作で扱えます。
記事中の <リモートマシンのユーザ名> や <リモートマシン名> といったプレースホルダーは、ご自身の環境に合わせて置き換えてください。
sshfs のインストール
Ubuntu でのインストール手順は以下の通りです。ターミナルを開き、以下のコマンドを実行します。sshfs は universe リポジトリのパッケージです。
# パッケージリストの情報を更新
sudo apt update
sudo apt -y install sshfs
sshfs は FUSE (Filesystem in Userspace) を利用します。Ubuntu 22.04 以降では sshfs パッケージが fuse3 に依存しており、必要なパッケージは同時にインストールされます。また、一般ユーザーがマウントするために fuse グループへ所属する必要はありません。
mount 操作の例
まず、マウントポイントとなるローカルディレクトリを作成します。sshfs は一般ユーザーで実行し、マウントポイントはそのユーザーが所有している必要があるため、ホームディレクトリ以下に作成します。ターミナルを開き、以下のコマンドを実行します。
mkdir -p ~/remote_files
次に、sshfs コマンドでリモートディレクトリをマウントします。ターミナルを開き、以下のコマンドを実行します。<リモートマシンのユーザ名>@<リモートマシン名>:/directory をリモートサーバーの情報に置き換えてください。
sshfs -o reconnect -o ServerAliveInterval=15 <リモートマシンのユーザ名>@<リモートマシン名>:/directory ~/remote_files
主要なオプション:
-o reconnect: 接続が切断された場合に自動で再接続を試みます。-o ServerAliveInterval=15: SSHの生存確認を15秒間隔で行います。無応答が続くと接続を切断するため、通信断で操作が停止したままになるのを防ぎます。-o sshfs_sync: 同期書き込みで動作します。書き込み性能は低下します。-o default_permissions: ローカル側でもパーミッションチェックを行います。
マウントされたことを確認するには、以下のコマンドを実行します。
df -h ~/remote_files
ls ~/remote_files
公開鍵認証を設定しておくと、パスワード入力なしでマウントできます。ローカルマシンで ssh-keygen コマンドにより鍵ペアを作成し、ssh-copy-id コマンドで公開鍵をリモートサーバーの ~/.ssh/authorized_keys に登録します。ターミナルを開き、以下のコマンドを実行します。
ssh-keygen -t ed25519
ssh-copy-id <リモートマシンのユーザ名>@<リモートマシン名>
unmount 操作の例
マウントを解除 (アンマウント) するには、fusermount3 コマンドを使用します。ターミナルを開き、以下のコマンドを実行します。
fusermount3 -u ~/remote_files
fuse3 ではなく fuse (バージョン2) を使用している環境では、コマンド名は fusermount です。ターミナルを開き、以下のコマンドを実行します。
fusermount -u ~/remote_files
自動マウントスクリプトの例
シェルの起動時にマウント状態を確認し、マウントされていない場合にマウントするスクリプト例です。~/.bashrc に記述すると、新しいシェルが起動するたびに実行されます。mountpoint コマンドは、指定したディレクトリがマウントポイントであるかを判定します。ユーザー名、ホスト名、パスは環境に合わせて変更してください。
if ! mountpoint -q /home/ubuntuuser/www; then
sshfs -o reconnect -o ServerAliveInterval=15 hoge@www.hoge.com:/var/www /home/ubuntuuser/www
fi
このスクリプトはパスワード入力を伴わないことが前提です。スクリプト内にパスワードを記述してはいけません。前述の公開鍵認証を設定してください。
アクセス時にマウントする方式にする場合は、systemd の automount ユニットを使用します。/etc/systemd/system/home-ubuntuuser-www.mount と同名の .automount ユニットを作成し、systemctl enable --now home-ubuntuuser-www.automount を実行します。
まとめ
この記事では、Ubuntu で sshfs をインストールし、リモートディレクトリをマウント・アンマウントする手順と、自動マウントスクリプトの例を示しました。
トラブルシューティングと参考情報
- マウントに失敗する場合: リモートサーバーへの通常のSSH接続 (
ssh <リモートマシンのユーザ名>@<リモートマシン名>) が成功するか確認します。sshfs はSSHの SFTPサブシステムを使用するため、サーバー側でSFTPが有効である必要があります。 - パーミッションエラーが発生する場合: ローカルのマウントポイントの所有権と、リモートサーバー側のファイルのパーミッションを確認します。
- 操作が応答しなくなる場合: 該当の
sshfsプロセスを終了させると、ブロックしていた操作がエラーを返して解放されます。 - sshfs の開発は現在ほとんど行われていません。長期運用では、
rclone mountや、GNOME Files (Nautilus) のsftp://接続の使用も選択肢になります。
オプションの詳細は、ターミナルで man sshfs コマンドを実行して確認できます。