sshfs 入門 - リモートのディレクトリをSSH経由でマウントする

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(遅延アンマウント)が使える。

切れても安全に使うには?(実務オプション)

結論: 実務では reconnectServerAliveInterval を必ず付ける。ネットワークが一瞬切れても自動で復帰し、アイドル切断も防げる。

$ 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/fstabfuse.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.confuser_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

次に読む