SSHFS-Win が便利そうだった - ngyukiの日記 ですが、よく考えてみれば WSL2 なら fuse も動くだろうので WSL2 で sshfs でリモートホストをマウントして \\wsl$\Ubuntu-20.04\mnt\ore-no-server
みたいな UNC パスでアクセスすればいいのでは、と思ったのでやってみました。
sudo apt install sshfs sudo mkdir /mnt/ore-no-server/ sudo chown $USER: /mnt/ore-no-server/ sshfs oreore@ore-no-server:/ /mnt/ore-no-server
エクスプローラーからアクセスすると次のようなエラーになりました。
\wsl$\Ubuntu-20.04\mnt\ore-no-server にアクセスできません。このネットワークリソースを使用するアクセス許可がない可能性があります。アクセス許可があるかどうかこのサーバの管理者に問い合わせてください。
無効なアドレスにアクセスしようとしています。
sshfs のオプションで -o allow_other
を指定すると大丈夫でした。ただ、このオプションはデフォでは root しか指定できないようです。
sshfs oreore@ore-no-server:/ /mnt/ore-no-server -o allow_other # fusermount: option allow_other only allowed if 'user_allow_other' is set in /etc/fuse.conf
/etc/fuse.conf
で user_allow_other
に有効にしておけば root 以外でも指定できました。
sudo vim /etc/fuse.conf # user_allow_other をコメントイン sshfs oreore@ore-no-server:/ /mnt/ore-no-server -o allow_other
sshfs を実行しているユーザーも、Windows から \\wsl$\
でアクセスしてきたときのユーザーも、同じになるように思うのですがなぜ -o allow_other
が必要なんでしょうかね? わかりません。
afuse
WSL2 でさらに autofs を組み合わせれば、事前に sshfs でマウントしておかなくてもアドホックにリモートホストを指定してアクセスできるのでは・・と思ってやろうとしたところ、autofs よりも手軽に使える afuse というものが見つかりました。
sudo apt install afuse sudo mkdir /sshfs sudo chown $USER: /sshfs afuse -o allow_other -o mount_template="sshfs %r:/ %m" -o unmount_template="fusermount -u -z %m" /sshfs
これで \\wsl$\Ubuntu-20.04\sshfs\oreore@ore-no-server
みたいなパスでリモートホストにアクセスできます。
後はこれを Windows にログイン時に自動で実行すれば良いです。スタートアップフォルダ(Windows キー + R で shell:startup
)に、↓のようなショートカットを作成しておけば OK です。
ubuntu2004.exe run "afuse -o allow_other -o mount_template='sshfs %r:/ %m' -o unmount_template='fusermount -u -z %m' /sshfs"
さらに次のようにレジストリに登録して \\wsl$\Ubuntu-20.04\sshfs
に X:\
を割り当てておくと X:\oreore@ore-no-server
みたいなパスでアクセスできるようになるのでなお便利です。
# cmd.exe (admin) REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices" /v X: /t REG_SZ /d \??\UNC\wsl$\Ubuntu-20.04\sshfs
ただ何故かエクスプローラー上では「切断したネットワーク ドライブ(X:)」みたいに表示されてしまいますが・・(でも普通に使える)
\\wsl$\Ubuntu-20.04\
をネットワークドライブとして永続化するだけのほうがよいかもしれません。
net use Y: \\wsl$\Ubuntu-20.04 /PERSISTENT:YES
若干タイプ数は増えますがこれでも Y:\sshfs\oreore@ore-no-server
みたいなパスでアクセスできます。
さいごに
これは便利!
と思ったんですが、やっぱり Windows のエクスプローラーでリモートホストの中身が見れてもあまり嬉しくないかも、そもそもあまりエクスプローラーでファイル操作しないし。
普段使っているのが WSL1 なので、WSL1 からアクセス出来ないと不便なんですよね・・WSL2 に移行すれば色々解決しそうな気もしますが、下記の問題が解決しない限り WSL2 には移行しないと思います。