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. Nuxt3入門(第1回) - Nuxtがサポートするレンダリングモードを理解する (2022-09-25)
  2. 自然言語処理初心者が「GPT2-japanese」で遊んでみた (2022-07-08)
  3. GitHub Codespaces を使いはじめる (2022-05-18)
  4. Jest再入門 - 関数・モジュールモック編 (2022-07-03)
  5. ORマッパーのTypeORMをTypeScriptで使う (2022-07-27)
  6. Nuxt3入門(第4回) - Nuxtのルーティングを理解する (2022-10-09)
  7. Nuxt3入門(第3回) - ユニバーサルフェッチでデータを取得する (2022-10-06)
  8. 第1回 OpenAPI Generator を使ったコード生成 (2022-06-04)
  9. Nuxt3入門(第8回) - Nuxt3のuseStateでコンポーネント間で状態を共有する (2022-10-28)
  10. Nuxt3入門(第2回) - 簡単なNuxtアプリケーションを作成する (2022-10-02)