Windows、macOS で sshfs を使用する

| 3 min read
Author: shigeki-shoji shigeki-shojiの画像

庄司です。

この記事では、Windows、macOS で sshfs を使用する手順を説明しますが、この説明の前に、sshfs について調べるきっかけになった背景を記述させてください。

私は Docker Desktop の代替として Rancher Desktop を使っています。macOS 上では Rancher Desktop の仮想 Linux 環境に lima が利用されています。

Windows や macOS の場合、仮想 Linux 環境上でコンテナが動作します。
つまり docker-cli を Windows や macOS のホスト側にインストールして、Linux 環境のソケットを通じて Docker デーモンと通信するようにした場合、ホストと Linux 環境でファイルシステムの構成は異なる可能性があります。

具体例を示すと、次のような Docker コマンドを実行してもホスト側のファイルシステム (例では /Volumes/Disk) にコンテナからアクセスできるとは限らないということです。

docker run -it --rm -v /Volumes/Disk:/mnt ubuntu

そこで Rancher Desktop のベースにもなっている lima では、sshfs を使って仮想 Linux 環境にユーザのホームディレクトリ (読み取りのみ) と一時ディレクトリ (lima の場合 /tmp/lima、Rancher Desktop の場合 /tmp/rancher-desktop) をマウントして、一部のディレクトリについてはホスト側にあるパスでマウントできるようになっています。

Rancher Desktop の FAQ には次のような記述があります。

Currently, the following directories are shared by default: /Users/$USER on macOS, /home/$USER on Linux, and /tmp/rancher-desktop on both. For Windows, all files are automatically shared via WSL2.

現在、デフォルトでは次のディレクトリが共有されています。macOS は /Users/$USER、Linux は /home/$USER と両者で /tmp/rancher-desktop。Windows の場合は、WSL2 によりすべてのファイルが自動的に共有されています。

sshfs は ssh プロトコルを使ってリモートのファイルシステムをローカルファイルシステムにマウントします。

macOS の Rancher Desktop では、上記の FAQ にあるディレクトリを sshfs を使って仮想 Linux 環境 (lima) にマウントすることで、macOS ホストとコンテナでファイルシステムを透過的に利用できるようになっています。

クラウドコンピューティングでは、ssh でサーバーのインスタンス (EC2 等) にアクセスすることがほとんどでしょう。サーバーのインスタンスとの間でファイルをアップロードやダウンロードする場合に、sshfs を使ってローカルのファイルシステムと同じ感覚で操作できると非常に便利です。

このようなことからホスト側 (Windows、macOS 等) に sshfs をインストールしてみることにしました。

Windows の場合

#

インストール

#

Chocolatey を使用して、次のコマンドで sshfs-win をインストールできます。

choco install sshfs

マウント

#

エクスプローラーを使う場合は、パスを次のような形式で入力します。

\\sshfs.r\REMOTEUSER@HOST\PATH

もちろん、任意のドライブ (X: 等) に割り当てることもできます。

macOS の場合

#

インストール

#

macOS の場合は、Homebrew を使って、次のようにインストールできます。

brew install --cask macfuse
brew install gromgit/fuse/sshfs-mac

マウント

#

ローカルへのマウントは次のようにコマンドを実行します。

sshfs REMOTEUSER@HOST:/PATH MOUNTPOINT

参考

#
豆蔵デベロッパーサイト - 先週のアクセスランキング
  1. 基本から理解するJWTとJWT認証の仕組み (2022-12-08)
  2. AWS認定資格を12個すべて取得したので勉強したことなどをまとめます (2022-12-12)
  3. Nuxt3入門(第4回) - Nuxtのルーティングを理解する (2022-10-09)
  4. Viteベースの高速テスティングフレームワークVitestを使ってみる (2022-12-28)
  5. Nuxt3入門(第8回) - Nuxt3のuseStateでコンポーネント間で状態を共有する (2022-10-28)
  6. ORマッパーのTypeORMをTypeScriptで使う (2022-07-27)
  7. Nuxt3入門(第1回) - Nuxtがサポートするレンダリングモードを理解する (2022-09-25)
  8. Jest再入門 - 関数・モジュールモック編 (2022-07-03)
  9. GitHub Actions - 構成変数(環境変数)が外部設定できるようになったので用途を整理する (2023-01-16)
  10. Nuxt3入門(第7回) - Nuxt3のプラグイン・ミドルウェアを使う (2022-10-23)