sshfs 入門 - リモートのディレクトリをSSH経由でマウントする
この記事で解決できること
sshfsで リモートのディレクトリをローカルにマウント できるようになるscp/rsyncとの 使い分け が分かる- 切断・権限・スタイルマウントなど 定番トラブルを即対処 できる
結論(実務の型)
- マウント:
sshfs user@host:/path ~/mnt -o reconnect,ServerAliveInterval=15 - アンマウント:
fusermount3 -u ~/mnt(旧環境はfusermount -u) - 頻繁に触る →
sshfs、一括転送 →rsync、単発 →scp
前提(対象環境)
- OS: Ubuntu / Debian 系(他ディストリでもパッケージ名以外は同様)
- リモートへ SSH 接続可能(鍵認証推奨)
- ローカルに FUSE が利用可能(通常のデスクトップ / サーバで既定で利用可)
sshfs とは?
結論: sshfs は SSH 越しにリモートのファイルシステムをローカルへマウントする FUSE ベースのツール。リモートのファイルをローカルのファイルと同じように直接読み書きできる。
sshfs(SSH Filesystem)は、SSH の SFTP サブシステムを使ってリモートホストのディレクトリをローカルのマウントポイントに接続する。マウント後は、リモートのファイルをローカルのパスとして扱えるため、ローカルのエディタ・ファイラ・ビルドツールがそのままリモートのファイルを操作できる。
scp / rsync が「ファイルをコピーする」のに対し、sshfs は「リモートを見えるようにする」。コピーを介さずに直接編集したい、リモートのログをローカルの GUI で開きたい、といった用途で力を発揮する。
FUSE(Filesystem in Userspace)上に実装されているため、root 権限なしで一般ユーザーがマウントできるのが NFS / CIFS との大きな違い。
どうやってインストールするのか?
結論: Ubuntu / Debian なら
sudo apt install sshfsの一発。これでsshfs本体と必要な FUSE ライブラリが入る。
# Ubuntu / Debian $ sudo apt update $ sudo apt install sshfs # RHEL / Rocky / AlmaLinux(EPEL 経由) $ sudo dnf install fuse-sshfs # macOS(Homebrew、別途 macFUSE が必要) $ brew install gromgit/fuse/sshfs-mac
インストール確認:
$ sshfs --version
SSHFS version 3.7.3 FUSE library version 3.14.0
sshfs プロジェクトは現在メンテナンスモード(活発な新機能開発は停止)。ただし広く使われており、安定して動作する。新規構築でより高機能を求める場合は NFS / Samba も検討対象。
どうやってマウントするのか?
結論:
sshfs user@host:/remote/path /local/mountpointが基本形。マウントポイントは事前に空ディレクトリを作っておく。
1. マウントポイントを用意する
$ mkdir -p ~/mnt/server
2. マウントする
$ sshfs user@server:/var/www ~/mnt/server
リモート側のパスを省略するとログインユーザーのホームディレクトリがマウントされる。
# リモートのホームをマウント $ sshfs user@server: ~/mnt/server
3. 確認する
$ ls ~/mnt/server $ mount | grep sshfs
user@server:/var/www on /home/local/mnt/server type fuse.sshfs (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
標準と異なるポートを使う場合
$ sshfs -p 2222 user@server:/var/www ~/mnt/server
どうやってアンマウントするのか?
結論:
fusermount3 -u マウントポイントでアンマウントする。libfuse2 系の旧環境ではfusermount -uを使う。
# libfuse3(現行の Ubuntu 等) $ fusermount3 -u ~/mnt/server # libfuse2(旧環境) $ fusermount -u ~/mnt/server
マウントポイント内に cd した状態や、そのファイルを開いているプロセスがあるとアンマウントに失敗する(device is busy)。先にそのディレクトリから抜け、開いているアプリを閉じること。どうしても外れない場合は fusermount3 -uz(遅延アンマウント)が使える。
切れても安全に使うには?(実務オプション)
結論: 実務では
reconnectとServerAliveIntervalを必ず付ける。ネットワークが一瞬切れても自動で復帰し、アイドル切断も防げる。
$ sshfs user@server:/var/www ~/mnt/server \
-o reconnect \
-o ServerAliveInterval=15 \
-o ServerAliveCountMax=3よく使うオプション:
| オプション | 効果 |
|---|---|
-o reconnect |
接続が切れたら自動再接続 |
-o ServerAliveInterval=15 |
15 秒ごとに keepalive を送り無通信切断を防ぐ |
-o ServerAliveCountMax=3 |
応答が 3 回連続で無ければ切断と判断 |
-o IdentityFile=~/.ssh/id_ed25519 |
使用する秘密鍵を明示 |
-o follow_symlinks |
リモートのシンボリックリンクをたどる |
-o idmap=user |
リモートの UID をローカルユーザーへマッピング |
-C / -o compression=yes |
転送を圧縮(低速回線で有効) |
-o ro |
読み取り専用でマウント |
鍵認証と ~/.ssh/config を整えておくと、sshfs myserver:/var/www ~/mnt/server のように Host エイリアスだけで接続できる。詳しくは関連記事を参照。
起動時に自動でマウントするには?
結論:
/etc/fstabにfuse.sshfsタイプで記述すれば自動マウントできる。ネットワーク依存のため_netdevを必ず付ける。
# /etc/fstab user@server:/var/www /home/local/mnt/server fuse.sshfs _netdev,reconnect,IdentityFile=/home/local/.ssh/id_ed25519,idmap=user,allow_other 0 0
allow_other(マウントしたユーザー以外もアクセス許可)を使う場合は、/etc/fuse.conf で許可が必要:
# /etc/fuse.conf user_allow_other
fstab に書く場合、ブート時点ではネットワーク・鍵がまだ使えないことがある。_netdev を付け、必要なら自動マウントではなく users,noauto にして手動 / ログイン時マウントにする方が事故が少ない。
トラブルシューティング
結論: 多くは「鍵 / 権限」「切断後のスタイルマウント」「allow_other 未許可」のいずれか。症状から原因を切り分ける。
Permission denied
$ sshfs user@server:/var/www ~/mnt/server read: Connection reset by peer
- まず素の SSH で入れるか確認:
ssh user@server - 鍵の指定漏れ →
-o IdentityFile=...を付ける - リモート側ディレクトリへの読み書き権限を確認:
ls -ld /var/www
Transport endpoint is not connected(スタイルマウント)
接続が切れた後にマウントポイントが壊れた状態で残るとこのエラーになる。一度アンマウントしてから貼り直す。
$ fusermount3 -u ~/mnt/server $ sshfs user@server:/var/www ~/mnt/server -o reconnect
ファイルの所有者が nobody / 数字で表示される
ローカルとリモートで UID が一致していないため。-o idmap=user を付けるとマウントユーザーへマッピングされ表示が揃う。
他ユーザー(や www-data 等)からアクセスできない
-o allow_other を付け、かつ /etc/fuse.conf に user_allow_other を記述する。
scp / rsync との使い分けは?
結論: 頻繁に直接編集するなら sshfs、大量・定期の同期は rsync、単発コピーは scp。役割が異なるので競合しない。
| 用途 | 推奨 |
|---|---|
| リモートを直接編集・閲覧 | sshfs |
| 大量データの同期 / バックアップ | rsync |
| 単発のファイルコピー | scp |
| 低速・不安定回線での確実な転送 | rsync |
コピペ用テンプレ
# マウント(実務向け) mkdir -p ~/mnt/server sshfs user@server:/var/www ~/mnt/server -o reconnect,ServerAliveInterval=15,idmap=user # アンマウント fusermount3 -u ~/mnt/server