🖥️

sshfs-winを用いたsshでのファイルシステムのマウント方法

2023/08/08に公開

sshfs-winはssh接続でファイルシステムをマウントするツールである。
リモート先をwindowsにネットワークドライブとしてマウントすることができ、
エクスプローラでリモート先のファイルを編集することができる。
管理者権限がなく、リモート先にsambaが導入できない環境などで使う。

sshfsは既に開発が終了しているのでメンテナンスが行われず、いずれ使えなくなる。
代替ツールとしてRcloneなるものがあるので、こちらについても試した内容をまとめて投稿予定。

追記:
RCloneについて以下にまとめた。
https://zenn.dev/kabec_dev/articles/4199b774f95e76


インストール方法

wingetがインストールされている場合は以下のコマンドで必要パッケージをインストール

winget install WinFsp.WinFsp
winget install SSHFS-Win.SSHFS-Win

wingetが使えない場合はgithubから.msiファイルをダウンロードしてインストールを進める。


マウント方法

詳細なコマンドについてはこちらを参照

接続するユーザーのホームディレクトリをマウント

以下のコマンドでマウントする。

net use Z: \\sshfs\[リモートユーザー名]@[ホスト]

ポート番号を指定してマウント

net use Z: \\sshfs\[リモートユーザー名]@[ホスト]!22

ルートディレクトリをマウント

net use Z: \\sshfs.r\[リモートユーザー名]@[ホスト]

当然、接続するユーザーにroot権限がないとマウントできないので注意。

/homeをマウント

net use Z: \\sshfs.r\[リモートユーザー名]@[ホスト]\home

当然、接続するユーザーにroot権限がないとマウントできないので注意。

鍵認証を用いてマウント

net use Z: \\sshfs.k\[リモートユーザー名]@[ホスト]

こちらのソースコードを見る限り、特定の鍵を参照することはできず、%USERPROFILE%/.ssh/id_rsaのみ参照される仕様。
参照したい鍵ファイルをid_rsaにリネームで対応するしか現状方法が見つかっていない。

~/.ssh/configから参照する方法もこちらで提案されているが、上手く実行できない。

sshfs-win svcを使って以下のようにすれば特定の鍵を参照して実行できるが、バックグラウンドで実行する方法がわからない(実行中のターミナルを立ち上げ続ける必要あり)。

sshfs-win svc \sshfs.k\[リモートユーザー名]@[ホスト] T: dummy -oIdentityFile="~/.ssh/id_rsa"

dummy[LOCUSER]を指定しなければ[SSHFS_OPTIONS]を読み込ませることができないので記述している。dummyという文字列自体に意味はない、適当な文字列で問題なし。
sshfs-win svcの使い方については公式ドキュメントのAdvanced Usageを参照。

追記

以下のツールを使えば、鍵を指定してマウントできることが分かった。
https://github.com/evsar3/sshfs-win-manager
AUTHENTICATION METHODPrivate Key (file)を選択し、KEY FILEで適当な鍵ファイルのパスを入力すればよい。右側のファイルアイコンをクリックするとエクスプローラが起動するのでそこから選択することも可能。

2024/01/29 追記

任意の鍵を指定してマウントする方法が以下に記載されていた。
情報としては2022年11月のものなので以前の執筆時の調査不足。
https://github.com/winfsp/sshfs-win/issues/155#issuecomment-1316261288

C:\Program Files\SSHFS-Win\etc直下にssh_configを格納し対応するssh接続情報を記載すればよい。
ただし、C:\Program Files\SSHFS-Win\etcへのファイルの書き込みは管理者権限が必要。
以下の画像のように確認を求められるが、続行をクリックし、管理者権限で実行が可能な場合は以下の手順で編集可能。

  1. ユーザーディレクトリ(%USERPROFILE%)配下でssh_configを編集。
    以下のように記載
    Host [任意の接続先設定名]
      User [リモートユーザー名]
      HostName [IPアドレス]
      IdentityFile ~/.ssh/[秘密鍵ファイル名]
      userknownhostsfile ~/.ssh/known_hosts
      Port [ポート番号]
    
  2. C:\Program Files\SSHFS-Win\etcssh_configを移動
  3. 以下のコマンドでマウント
    net use Z: \\sshfs.k\[リモートユーザー名]@[任意の接続先設定名]![ポート番号]
    

参考記事には上記のように記載されていたが以下でも可能。

net use Z: \\sshfs.k\[任意の接続先設定名]![ポート番号]

アンマウント

通常のネットワークドライブをアンマウントする時と同様

net use Z: /delete

マウント設定の記述を誤って異常なネットワークドライブが残ってしまった場合

以下のコマンドの実行したのち、PCを再起動すれば改善する。

net use /PERSISTENT:NO

シャットダウンは以下のコマンドで可能。

shutdown /r /t 0

SSHFS-Win Managerについて

コマンドでのマウントが煩雑な場合はこちらのGUIベースでマウントするツールも存在しているのでそちらをつかう。


注意点

筆者の環境だけかもしれないが、他のネットワークドライブからsshfs-winでマウントしたネットワークドライブにコピペを実行すると高確率でエクスプローラーが固まってしまうので注意(単純にコピーに時間がかかっているだけの可能性もある)。
この状態になるとエクスプローラー自体も上手く終了できなくなるので、上記のような作業を実施したい場合は一旦ローカルにコピーしてからsshfs-winでマウントしたネットワークドライブにコピペすること。


reference

Discussion