Windows上でWinSshFS使う代わりに 、VM上のUbuntuでSSHFSつかって、SMBでWindowsとファイル共有する

プログラミングor技術

https://jtanx.github.io/2017/10/16/an-alternative-approach-to-sshfs-on-windows/
内容としては↑と同じです。しかしUbuntuではこの通りやってもできません。

あと日本語の情報だと次のURLにありますが、手順は解説されていません。

1432992778

これの②をやります。
➀だと以下のような問題点がありました。

なぜWinSshFSを使わないか

SSHFSを使うのを一か所でまとめたい(がWindows上で動くLinuxとの共有が難しい)

前提として、仮想マシンと、ホストとなるWindowsの両方からSSHFSを使うことはなるべくしたくないという事情があります。
なのでSSHFS接続を一か所(=Windowsか、VM上のUbuntuか)で行い、それを共有する形をとりたいです。

WinSshFSを使ってこれをやるとなると上の図の➀になります。

VirtualBox上のLinuxとの共有では遅くて使えない

WinSshFSでWindows上にマウントをしたものをVirtualBoxのファイル共有機能を使い仮想マシンと共有したところ、lsコマンドに1秒、tabキーでファイル名補間に1~2秒、vimで開くと3秒かかるといった有様で快適に使えません。

WSLで動くUbuntではそもそもマウントできなかった(たぶん?)

WSLで動くUbuntuと共有したかったのですが、現在のところWSLで動くUbuntuはこのタイプのドライブのマウントができないようです。

WindowsのDドライブに、WinSshFSでリモートのファイルをマウントしたところ、

sudo mount -t drvfs D: /mnt/d
というコマンドでは
mount: /mnt/d: wrong fs type, bad option, bad superblock on D:, missing codepage or helper program, or other error. 
と怒られるので、
今度はファイルシステムタイプのところをautoにしたところ
unknown filesystem type “NFS”
みたいなエラーが出てしまいます。
マウントできたところでWSLは仮想マシンよりI/Oが遅いとかなんとか聞くので良い結果にはならなかったかもしれません。

それと現在のところ、WSLのUbuntuはFUSEには対応していないようです。よってsshfsコマンドもたぶん使えないです。
https://wpdev.uservoice.com/forums/266908-command-prompt-console-bash-on-ubuntu-on-windo/suggestions/13522845-add-fuse-filesystem-in-userspace-support-in-wsl

再接続が怪しい

Docan Library 1.0.3、WinSshFS 1.6.1.13 で試したところ、スリープしたりWi-FI切断されたりしてVPNが切断されたときに再接続がうまくされません。
VPNなしではどうか知りませんが…ネット上では再接続が上手くいかないという情報も見るので、あまり期待はしてないです。

ちなみにmacOSでは

macOS側でSSHFSを使ってマウントしたものを、仮想マシンとVirtualBoxの機能で共有しても、少しラグはあるものの普通に使えました。
再接続も普通に行われます。
こんなクソ面倒な作業は要りません。

環境

Ubuntu 16.04 LTS 日本語ver Windows10 1803  ビルド17134.228

手順

UbuntuでSSHFSの準備(fuseグループのあたりが元記事には無いです)

sshfsをインストールします。
# apt install sshfs

マウントポイントとしたいディレクトリのオーナーがfuseグループに追加されていることを確認してください。
(そうでない場合、read: Connection reset by peer とかいうエラーが出ます)

今回の説明の場合はuser1というユーザのホームディレクトリ以下に作成したので、user1をfuseグループに追加します。(fuseグループがない場合、groupaddコマンドでfuseグループを作成してください)

# usermod -a -G fuse user1

UbuntuでSambaの準備

VirtualBoxのネットワーク設定

ホストオンリーアダプターを追加しておきます

インストール(同じ)

# apt install samba

Sambaの設定変更(設定ファイルの場所が元記事と違います)

設定ファイルは/etc/samba/smb.confにあります。これの末尾に次の内容を追加します。
[remotesshfs]
   comment = sshfs remote
   # マウントしたディレクトリの位置にでもする
   path = /home/user1/mount/mountpoint1
   browseable = yes
   writeable = yes
   guest ok = yes
   acl allow execute always = True
   read only = no
   public = yes
   # user1の位置をVM上のLinuxで使用中のユーザ名に変える
   force user = user1

設定を再読み込みするためにデーモンを再起動します

# systemctl restart smbd nmbd

次に、ホストオンリーアダプターによってUbuntuに割り振られたIPアドレスを確認します。

$ ifconfig
enp0s3    Link encap:イーサネット  ハードウェアアドレス 08:00:27:c4:98:ce  
          inetアドレス:10.0.2.15  ブロードキャスト:10.0.2.255  マスク:255.255.255.0
          inet6アドレス: fe80::528a:18a6:99ef:d36a/64 範囲:リンク
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1
          RXパケット:20 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:118 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:1000 
          RXバイト:3940 (3.9 KB)  TXバイト:14540 (14.5 KB)

enp0s8    Link encap:イーサネット  ハードウェアアドレス 08:00:27:b8:3d:e0  
          inetアドレス:192.168.56.101  ブロードキャスト:192.168.56.255  マスク:255.255.255.0
          inet6アドレス: fe80::49b4:7979:6a11:39ec/64 範囲:リンク
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1
          RXパケット:16 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:85 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:1000 
          RXバイト:2670 (2.6 KB)  TXバイト:10390 (10.3 KB)

lo        Link encap:ローカルループバック  
          inetアドレス:127.0.0.1  マスク:255.0.0.0
          inet6アドレス: ::1/128 範囲:ホスト
          UP LOOPBACK RUNNING  MTU:65536  メトリック:1
          RXパケット:51 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:51 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:1 
          RXバイト:3939 (3.9 KB)  TXバイト:3939 (3.9 KB)

192.168.56.101です。

こうすることで、Windowsのエクスプローラのアドレスバーに192.168.56.101remotesshfs と入れれば、VM上のUbuntuの/home/user1/mount/mountpoint1にアクセスできるようになります。

いよいよ接続

UbuntuとリモートとでSSHFSでファイル共有

ファイルパスやremote-user-nameとremote-host-nameは自分のものに変えてください。idmap=userというのはそういうオプションなので自分のユーザ名に変える必要はないです。

$ sshfs -o auto_cache -o reconnect  -o allow_other -o idmap=user  remote-user-name@remote-host-name:/home/user1/ /home/user1/mount/mountpoint1/

WindowsとUbuntuとでSMBでファイル共有

Windowsのエクスプローラに192.168.56.102remotesshfsと入れます。ユーザ名とパスワードを聞かれるのでVM上のUbuntuのユーザ名とパスワードを入れると、ファイル共有ができます!

コメント