「リモートサーバーのファイルをローカルで直接編集できたら、もっと効率が上がるのに」
SSH接続した先のファイルをScpで毎回コピーしたり、viで直接編集したりするのは手間がかかります。
この記事では、sshfsコマンドを使ってリモートサーバーのファイルシステムをローカルにマウントする方法を解説します。
RHEL 9.4 / Ubuntu 24.04 LTS で動作確認済みの手順で、インストールから日常的な活用例、アンマウント、トラブルシュートまで一気に説明します。
この記事のポイント
・sshfsコマンドでリモートのディレクトリをローカルに透過マウントできる
・インストールはfuse3パッケージ1本で完了、root権限なしで使える
・/etc/fstabやsystemd.mountで起動時自動マウントも設定可能
・アンマウントはfusermount3 -u、Connection reset by peerはSSHキー再確認
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
sshfsとは何か?仕組みとメリット
sshfs(SSH Filesystem)は、SSHプロトコルを使ってリモートサーバーのディレクトリをローカルにマウントするツールです。FUSE(Filesystem in Userspace)という仕組みを使っているため、root権限なしに一般ユーザーが使えます。
内部ではSSH接続のSFTPサブシステムを利用しているため、ファイアウォールの追加ポート開放は不要です。すでにSSHで接続できるサーバーであれば、すぐに使えます。
従来の方法と比べると、sshfsの利点は明確です。
| 方法 | 特徴 | 向いているケース |
|---|---|---|
| scp / rsync | 都度コピー、差分転送 | バックアップ・大量ファイル転送 |
| vi / vim(直接編集) | SSHログイン後にCLIで編集 | 1ファイルの簡単な修正 |
| sshfs | ローカルのエディタやGUIで透過的に扱える | 複数ファイルの継続的な開発・編集 |
VSCodeのRemote-SSHと似ていますが、sshfsはコマンドラインで完結するため、エディタを選ばないのが強みです。リモートサーバーをローカルのNASのように扱えるイメージです。
sshfsのインストール方法
1. RHEL 9 / AlmaLinux 9 / Rocky Linux 9 の場合
RHELベースのディストリビューションでは、fuse-sshfsパッケージをインストールします。EPELリポジトリが必要です。
# EPELリポジトリを有効化(未設定の場合) $ sudo dnf install -y epel-release # sshfsをインストール $ sudo dnf install -y fuse-sshfs # バージョン確認 $ sshfs --version SSHFS version 3.7.3 FUSE library version 3.16.2 using FUSE kernel module interface version 7.38
2. Ubuntu 24.04 LTS / Debian の場合
# sshfsをインストール(sshfsパッケージにfuse3が含まれる) $ sudo apt install -y sshfs # バージョン確認 $ sshfs --version SSHFS version 3.7.3
インストール後、一般ユーザーがFUSEを使えるようfuseグループにユーザーを追加します(Ubuntuでは通常不要、RHELでは設定が必要なことがあります)。
# 自分自身をfuseグループに追加(RHELで必要な場合) $ sudo usermod -aG fuse $(whoami) # グループ変更を反映(一度ログアウト・ログインするか、newgrpで即時反映) $ newgrp fuse
基本的なマウント方法
3. マウントポイントの作成
まず、リモートファイルシステムをマウントするためのディレクトリ(マウントポイント)を作成します。
# マウントポイントを作成 $ mkdir -p ~/remote-server # ディレクトリが作成されたことを確認 $ ls -la ~/ drwxr-xr-x. 2 tomohiro tomohiro 6 5月 31 10:00 remote-server
4. sshfsでマウントする
基本的な構文は次の通りです。
# 書式: sshfs [ユーザー名]@[ホスト]:[リモートパス] [ローカルマウントポイント] $ sshfs tomohiro@192.168.1.100:/var/www/html ~/remote-server # 接続確認(実サーバーの出力例) $ ls ~/remote-server index.php config.php public storage vendor # dfコマンドでマウントされていることを確認 $ df -h ~/remote-server Filesystem Size Used Avail Use% Mounted on tomohiro@192.168.1.100:/var/www/html 50G 18G 30G 38% /home/tomohiro/remote-server
これだけで、~/remote-server以下のファイルを、ローカルのファイルと全く同じように操作できます。テキストエディタやIDEからも透過的にアクセスできます。
5. SSHの秘密鍵を指定してマウントする
パスワード認証ではなく公開鍵認証を使う場合(これが推奨です)は、-o IdentityFileオプションで秘密鍵を指定します。
# 秘密鍵を指定してマウント $ sshfs -o IdentityFile=~/.ssh/id_rsa tomohiro@192.168.1.100:/var/www/html ~/remote-server # ~/.ssh/configに設定済みのHost名で指定することも可能 $ sshfs webserver01:/var/www/html ~/remote-server
SSH設定ファイルに接続情報をまとめておくと、sshfsのコマンドも短くなります。Linuxのポート確認とSSH接続のトラブルシュートについては別記事で詳しく解説しています。
よく使うオプションと実務Tips
sshfsには接続を快適にするオプションがいくつかあります。現場でよく使う設定をまとめます。
| オプション | 説明 | 使いどころ |
|---|---|---|
| reconnect | 切断時に自動再接続する | 長時間作業・不安定回線 |
| ServerAliveInterval=15 | 15秒ごとに疎通確認パケットを送る | タイムアウト防止 |
| Compression=yes | SSHレベルで圧縮転送する | 低速回線・テキストファイル多い場合 |
| allow_other | マウントユーザー以外もアクセス可能 | 複数ユーザーで共有する場合 |
| uid=1000,gid=1000 | マウントしたファイルのUID/GIDを強制指定 | パーミッション不一致の解消 |
| port=2222 | SSHポートを指定する | デフォルト22番以外のポート |
実務でよく使う組み合わせコマンドです。
# 長時間作業向けの推奨設定 $ sshfs -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3 tomohiro@192.168.1.100:/var/www/html ~/remote-server # 非標準ポートへの接続 $ sshfs -o port=2222 tomohiro@192.168.1.100:/home/deploy ~/remote-server
アンマウントの方法
sshfsでマウントしたファイルシステムをアンマウントするには、fusermount3 -uコマンドを使います(古い環境ではfusermount -u)。
# アンマウント(Linux標準のumountと異なるコマンドを使う) $ fusermount3 -u ~/remote-server # アンマウント確認 $ df -h ~/remote-server df: /home/tomohiro/remote-server: mountpoint not found # sudoが使える環境ではumountも使用可能 $ sudo umount ~/remote-server
「Transport endpoint is not connected」というエラーが出てアンマウントできない場合は、-z(lazy unmount)オプションを使います。
# 強制アンマウント(Transport endpoint is not connected の場合) $ fusermount3 -uz ~/remote-server
起動時に自動マウントする方法
毎回手動でマウントするのは手間がかかります。/etc/fstabを使うか、systemdの.mountユニットで自動マウントを設定できます。
6. /etc/fstabで自動マウントを設定する
/etc/fstabに以下の形式で追記します。SSHキー認証が前提です。パスワード認証では起動時に止まります。
# /etc/fstab に追記(rootで編集) # 書式: [ユーザー]@[ホスト]:[リモートパス] [ローカルパス] fuse.sshfs [オプション] 0 0 tomohiro@192.168.1.100:/var/www/html /mnt/remote-server fuse.sshfs IdentityFile=/home/tomohiro/.ssh/id_rsa,_netdev,allow_other,reconnect,ServerAliveInterval=15 0 0 # fstabが正しいか確認してマウント $ sudo mount -a # マウント確認 $ mount | grep fuse.sshfs tomohiro@192.168.1.100:/var/www/html on /mnt/remote-server type fuse.sshfs (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000,allow_other)
_netdevオプションは「ネットワーク接続後にマウントする」という指示です。これを忘れると起動時にネットワークが上がる前にマウントしようとして失敗します。mountコマンドの詳細についてはmountコマンドとfstabの使い方を参照してください。
トラブルシュート|よくあるエラーと対処法
「Connection reset by peer」が出てマウントできない
SSH接続自体はできるのにsshfsが失敗する場合、SSHサーバー側でSFTPサブシステムが無効になっている可能性があります。
# リモートサーバー側の/etc/ssh/sshd_configを確認 $ grep -i sftp /etc/ssh/sshd_config Subsystem sftp /usr/lib/openssh/sftp-server # この行が必要 # sshd_configにSFTP設定がない場合は追記して再起動 $ sudo systemctl restart sshd
sshd_configの設定全般についてはsshd_configの設定ガイドも参考にしてください。
「fuse: device not found, try 'modprobe fuse'」が出る
# fuseカーネルモジュールをロード $ sudo modprobe fuse # 永続化(起動時に自動ロード) $ echo fuse | sudo tee /etc/modules-load.d/fuse.conf
マウントはできるがファイルが見えない・Permission denied
UID/GIDの不一致が原因のことが多いです。-o uid=と-o gid=でローカルのユーザーIDに合わせます。
# 自分のUID/GIDを確認 $ id uid=1000(tomohiro) gid=1000(tomohiro) groups=1000(tomohiro),10(wheel) # UID/GIDを指定してマウント $ sshfs -o uid=1000,gid=1000 tomohiro@192.168.1.100:/var/www/html ~/remote-server
本記事のまとめ
sshfsコマンドを使えば、リモートサーバーのファイルシステムをローカルのディレクトリとして透過的に扱えます。特別なサーバー設定は不要で、すでにSSH接続できる環境であればすぐに使えるのが最大の利点です。
| やりたいこと | コマンド・設定 |
|---|---|
| 基本的なマウント | sshfs ユーザー@ホスト:リモートパス ローカルパス |
| 秘密鍵を指定してマウント | sshfs -o IdentityFile=~/.ssh/id_rsa ユーザー@ホスト:リモートパス ローカルパス |
| タイムアウト防止で長時間マウント | sshfs -o reconnect,ServerAliveInterval=15 ユーザー@ホスト:リモートパス ローカルパス |
| アンマウント | fusermount3 -u ローカルパス |
| 強制アンマウント(接続切れ後) | fusermount3 -uz ローカルパス |
| fstabで自動マウント | ユーザー@ホスト:リモートパス ローカルパス fuse.sshfs _netdev,IdentityFile=... 0 0 |
| パーミッション不一致の解消 | sshfs -o uid=1000,gid=1000 ユーザー@ホスト:リモートパス ローカルパス |
日常的なファイル編集作業にはsshfs、大量ファイルの一括転送にはrsync、という使い分けを覚えておくと効率が上がります。SSH経由の安全な接続を活かしつつ、リモートサーバーとのファイル操作を快適にしてください。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、Linuxサーバー構築入門マニュアル(図解60P)を無料でお渡ししています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 前のページへ:keepalivedコマンドでLinuxサーバーを冗長化する方法|VRRP設定・仮想IP・フェイルオーバーの実践例
- この記事の属するカテゴリ:Linuxtipsへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます