SSHFSでリモートディレクトリをマウント:サーバー上のコードをローカルドライブのように直接編集

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

リモートサーバー上のファイル操作に苦労していませんか?

サーバーを管理している方なら、このような状況に心当たりがあるはずです。シンガポールにあるVPSのレイテンシ(ping)が50〜70msほどあり、数十個の設定ファイルを急いで修正しなければならない場面です。通常は、ターミナルで直接 vinano を使うか、FileZillaなどでファイルをダウンロードして修正後にアップロードし直すといった方法をとるでしょう。

しかし、ターミナルでの作業は制限が多く、VS CodeのようなIDEの強力なリファクタリング機能を活かせません。かといってFTPを使うのは非常に時間がかかります。私が管理しているUbuntu 22.04のプロダクションサーバーでも、手動のアップロード・ダウンロード作業でデバッグのたびに20〜30分を浪費していました。さらに、古いバージョンを誤って上書きしてしまうリスクも常に付きまといます。

なぜ従来の方法はストレスが溜まるのか?

問題は、作業の「分断」にあります。scprsync を使う場合、カンマ一つ修正するたびにコマンドを打ってファイルを転送しなければなりません。この操作を一日に何百回も繰り返すのは、極めて非効率で疲弊してしまいます。

NFSやSambaはどうでしょうか?これらはインターネット経由での設定が非常に複雑です. ファイアウォールのポートを多数開放する必要があり、セキュリティ上の脆弱性を生むリスクがあります。私たちが求めているのは、SSHのように安全で、かつ外付けハードディスクのように手軽なツールです。

一般的なソリューションの比較

  • SCP/SFTP: ファイルごとに転送が必要なため遅く、直接ファイルを開くのには向きません.
  • NFS/Samba: 速度は良好ですが、設定が難解で、安全性のためにVPNが必要になります.
  • Rsync: リアルタイムな作業よりも、定期的なバックアップに適しています.

SSHFS – サーバーのディレクトリをローカルドライブに変える

SSHFS (SSH Filesystem) は、開発環境を一変させるソリューションです。このツールはFUSE(Filesystem in Userspace)に基づいており、SSHポート(デフォルトは22)を介してサーバーのディレクトリをローカルマシンにマウントできます。

マウントが完了すると、サーバーのディレクトリが通常のドライブとして表示されます。VS Codeでそのディレクトリを開き、Ctrl+S で保存すれば、サーバー上のファイルが即座に更新されます。アップロードの手間も、待ち時間もありません。

1. SSHFSのインストール(30秒で完了)

ほとんどのLinuxディストリビューションでは、公式リポジトリにSSHFSが用意されています。

Ubuntu/Debianの場合:

sudo apt update && sudo apt install sshfs

CentOS/RHEL/AlmaLinuxの場合:

sudo yum install epel-release
sudo yum install sshfs

2. リモートディレクトリをマウントする手順

例えば、IPアドレス 1.2.3.4 のサーバーにある /var/www/html ディレクトリを、ローカルの ~/server_data にマウントしたいとします。

まず、マウントポイントとなるディレクトリを作成します。

mkdir -p ~/server_data

以下のコマンドを実行してマウントします。

sshfs [email protected]:/var/www/html ~/server_data

SSHパスワードを求められますが、より高速で安全な SSH Key(公開鍵認証) の使用を強くおすすめします。

3. 確認と使用方法

<a href="https://itfromzero.com/ja/linux/linux%e5%90%91%e3%81%91eza%e3%83%bbbat%e3%83%bbfd-find%ef%bc%9als%e3%80%81cat%e3%80%81find%e3%82%92%e7%bd%ae%e3%81%8d%e6%8f%9b%e3%81%88%e3%82%8b%e7%8f%be%e4%bb%a3%e7%9a%84%e3%83%84%e3%83%bc%e3%83%ab3.html">ls</a> ~/server_data を実行して中身を確認してみましょう。これで、~/server_data 内でのファイルのドラッグ&ドロップや編集は、すべてサーバー上のファイルに直接反映されます。

4. 接続解除(アンマウント)

作業が終わったら、リソースを解放するために接続を解除します。

fusermount -u ~/server_data

SSHFSをローカルドライブのように快適に使うための最適化のコツ

デフォルト設定ではネットワーク環境によってラグを感じることがあります。私がいつも使用している2つのカスタマイズ設定を紹介します。

圧縮の有効化と接続維持

ネットワークが不安定な場合に備えて、圧縮オプションと自動再接続の設定を追加します。

sshfs -o compression=yes -o reconnect -o ServerAliveInterval=15 [email protected]:/var/www/html ~/server_data

OS起動時に自動マウントする

毎日コマンドを打つのが面倒な場合は、/etc/fstab に設定を記述できます。パスワード入力なしで自動認識させるために、必ずSSH Keyを使用してください。

/etc/fstab ファイルの末尾に以下の行を追加します。

[email protected]:/var/www/html /home/user/server_data fuse.sshfs _netdev,allow_other,IdentityFile=/home/user/.ssh/id_rsa 0 0

ヒント: allow_other を動作させるには、/etc/fuse.conf ファイル内の user_allow_other の行のコメントアウトを解除してください。

おわりに

SSHFSは、数十GBの大容量ファイルを転送するための最良の選択肢ではありません(その場合は rsync の方が適しています)。しかし、日々のコード修正、ログの確認、設定ファイルの管理において、これほど便利なツールは他にありません。

SSHFSを使い始めてから、私のPCからFTPソフトは完全に姿を消しました。ワークフローがシームレスになり、データの移動に気を取られることなく、コードのロジックに最大限集中できるようになりました。

Share: