SSHFS-Win が便利そうだった

Windows でも sshfs でリモートホストのディレクトリをマウントできるやつです。

Chocolatey で入れようと思ったのですが、すごく古い? あるいは別物?

なので Scoop で入れました。nonportable バケットを追加する必要があります。

# cmd.exe
scoop bucket add nonportable
scoop install sshfs-np

インストール後、コマンドプロンプトで次のように入力し、リモートのユーザー名とパスワードを入力すると X: にリモートホストのユーザーのホームディレクトリがマウントされます。

# cmd.exe
net use X: \\sshfs\oreore@ore-no-server

要らなくなったら次のコマンドで削除します。

# cmd.exe
net use X: /delete

UNC を \\sshfs.r で指定すればホームディレクトリではなくルートディレクトリをマウントできます。

# cmd.exe
net use X: \\sshfs.r\oreore@ore-no-server

公開鍵認証もできます。%USERPROFILE%/.ssh/id_rsa に秘密鍵を置きます。普段は WSL で SSH を使っているので WSL のホームディレクトリからコピります。

# WSL
cp ~/.ssh/id_* "$(wslpath "c:\\Users\\$USER\\.ssh")"

UNC を \\sshfs.k で指定すれば公開鍵認証になるのでユーザー名やパスワードの入力は必要ありません。なお、この場合はリモートユーザのホームディレクトリがマウントされます。

# cmd.exe
net use X: \\sshfs.k\oreore@ore-no-server

SSHFS-Win の README によると \\sshfs.kr で公開鍵認証&ルートディレクトリをマウントできるとのことなのですが、なぜか出来ません。

# cmd.exe
net use X: \\sshfs.kr\oreore@ore-no-server
# システム エラー 67 が発生しました。
#
# ネットワーク名が見つかりません。

Scoop で入った SSHFS-Win のバージョンが安定版の v3.5.20024 だからでした。最新版を入れればたぶんできると思います。

また、ed25519 の秘密鍵だとダメでした。SSHFS-Win に付随されている ssh のバージョン的には大丈夫そうですけど。

# cmd.exe
"C:\Program Files\SSHFS-Win\bin\ssh.exe" -V
# OpenSSH_8.0p1, OpenSSL 1.1.1d  10 Sep 2019

どうも .ssh/id_rsa がベタ書きされているためのようです。

また、%USERPROFILE%/.ssh/config にいろいろ書いておいても net use でマウントするときには参照されないようです。

さいごに

昔はよく CentOS に samba を入れて Windows からアクセスできるようにしていたのですが、実際のところ Windows から直接リモートのファイルを開くようなことはほとんど無く、ssh でログインして vim なり、scp や rsync なりで十分だったため、samba は使わなくなりました。

ので、改めて Windows から sshfs でリモートホストにアクセス出来るようになっても、個人的にはあまり使うことは無さそうな気もしています。

ただ、普段 scp や rsync とかの CLI よりも WinSCP とかの GUI をメインに使っている人にはこれは有用かもしれません。

なお、あらかじめ net use などでネットワークドライブとしてマウントしてく必要があるようです。直接エクスプローラーから \\sshfs.k\oreore@ore-no-server のような UNC パスは開けませんでした。これはちょと不便な気もします。SSH ログインさえ出来るようにしておけば事前準備なしにエクスプローラーからサクッと開ける、なら便利そうですけど、ちょっと残念。

もしくは下記のように sshfs-win.exe を直接実行すれば、コマンドを実行中だけリモートとストを指定したディレクトリにマウントできるようです。

"C:\Program Files\SSHFS-Win\bin\sshfs-win.exe" cmd -f oreore@ore-no-server:/ ore-no-server

Ctrl+x でコマンドを止めればマウントも終了します。

"C:\Program Files\SSHFS-Win\bin\sshfs.exe" -f oreore@ore-no-server:/ ore-no-server