sshfs-winを用いたsshでのファイルシステムのマウント方法
sshfs-win
はssh接続でファイルシステムをマウントするツールである。
リモート先をwindowsにネットワークドライブとしてマウントすることができ、
エクスプローラでリモート先のファイルを編集することができる。
管理者権限がなく、リモート先にsambaが導入できない環境などで使う。
sshfs
は既に開発が終了しているのでメンテナンスが行われず、いずれ使えなくなる。
代替ツールとしてRcloneなるものがあるので、こちらについても試した内容をまとめて投稿予定。
追記:
RCloneについて以下にまとめた。
インストール方法
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を参照。
追記
以下のツールを使えば、鍵を指定してマウントできることが分かった。AUTHENTICATION METHOD
でPrivate Key (file)
を選択し、KEY FILE
で適当な鍵ファイルのパスを入力すればよい。右側のファイルアイコンをクリックするとエクスプローラが起動するのでそこから選択することも可能。
2024/01/29 追記
任意の鍵を指定してマウントする方法が以下に記載されていた。
情報としては2022年11月のものなので以前の執筆時の調査不足。
C:\Program Files\SSHFS-Win\etc
直下にssh_config
を格納し対応するssh接続情報を記載すればよい。
ただし、C:\Program Files\SSHFS-Win\etc
へのファイルの書き込みは管理者権限が必要。
以下の画像のように確認を求められるが、続行
をクリックし、管理者権限で実行が可能な場合は以下の手順で編集可能。
- ユーザーディレクトリ(
%USERPROFILE%
)配下でssh_config
を編集。
以下のように記載Host [任意の接続先設定名] User [リモートユーザー名] HostName [IPアドレス] IdentityFile ~/.ssh/[秘密鍵ファイル名] userknownhostsfile ~/.ssh/known_hosts Port [ポート番号]
-
C:\Program Files\SSHFS-Win\etc
にssh_config
を移動 - 以下のコマンドでマウント
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
- winfsp/winfsp
- winfsp/sshfs-win
- evsar3/sshfs-win-manager
- SSHFS-Win が便利そうだった
- Windows 10 でsshfsを使ってみた (billziss-gh/sshfs-win)
- sshfsを使用してssh経由でリモートディレクトリをマウントする方法
- map to root (or other directory) instead of home
- WindowsからSSH越しにファイルシステムをマウントする(SSHFS-Win)
- SSHFS-Win Manager
- System error 67 when attempting to mount · Issue #155 · winfsp/sshfs-win
Discussion