SSHFS を使用して WSL 内にあるフォルダーを Ubuntu 20.4 マシンにマウントしようとしていますが、常に「そのようなファイルまたはディレクトリはありません」というメッセージが表示されます。どうすればいいですか?
ディレクトリをマウントしようとした明白な方法は次のとおりです。
sshfs user@remotehost:"\\wsl$\Ubuntu-20.04" /home/user/Remote/
答え1
短い答え:
WSL にアクセスするには、Windows ホストを ssh ジャンプホストとして使用します。
もっと詳しく:
ssh 経由で WSL (特に WSL2) にアクセスしようとすると、いくつかの落とし穴があります。
まず、WSL2 は NAT された vNIC を使用して仮想化環境で実行されるという事実に遭遇したかもしれません。つまり、WSL2 で実行されているサービスは、ネットワーク上の他のマシンから直接アクセスできません。
WSLはローカルホスト転送これにより、Windows ホスト自体から WSL2 で実行されているサービス (経由localhost:portnumber
) にアクセスできるようになります。ただし、これはネットワーク上の他のマシンには拡張されません。
これについてはGithubのスレッドで詳しく見ることができますここリンクは直接コメントへのリンクになっており、通常これを解決するために推奨されます。
これには以下が含まれます:
- ファイアウォールルールの設定
- Windows から WSL2 仮想ネットワーク インターフェイスへのポート転送
- ここでの最大の課題は、WSL が再起動するたびに vNIC のアドレスが変わることです。そのため、スクリプトは再起動するたびに古いルールを削除して再作成する必要があります。
しかし、更新された編集では、少し異なることを試みているようです。おそらく Windows ホスト自体の ssh 経由で、Windows 経由で WSL 疑似共有にアクセスしようとしているようです。
残念ながら、これも機能しません。なぜなら、\\wsl$\...
それ自体がネットワークファイルシステム(9Pプロトコルを使用)だからです。つまり、実際には存在するssh 経由でアクセスした場合、Windows ホスト自体で実行されます。
私がSSH(そしてsshfs
)で好む解決策は、ssh ジャンプホストこれにより、「vNIC アドレスの変更」の問題が回避され、Windows を起動するたびにスクリプトを実行する必要がなくなります。
これを設定するには:
- Windows OpenSSHサーバーをインストールするWindows ホスト上。私は「ホスト」ssh にデフォルトのポート 22 を使用していますが、必ずしもそうする必要はありません。
- WSL インスタンスに SSH をインストールして構成します。ここでは、Windows ホストとは異なるポート番号を使用する必要があります。この例では、ポート を使用します
8022
。ポートを変更するには、 を編集します/etc/ssh/sshd_config
。 - オプションですが、推奨されます。Windows OpenSSH インスタンスと WSL インスタンスの両方に公開キーを設定します
../ssh/authorized_keys
(Windows OpenSSH では、これは%userprofile%/.ssh
ディレクトリの下にあります。Linux/WSL では、もちろん にあります)~/.ssh
。
前述のとおり、Windows ホストは 上の WSL2 インスタンスにアクセスできるためlocalhost
、Windows SSH を WSL2 SSH セッションへのジャンプホストとして使用できます。
仮定して:
- Windows コンピュータの名前は
windowshost
(実際の名前に置き換えてください) - Windows OpenSSHはポート22にあります
- WSL SSHサーバーはポート8022にあります
次に、次のコマンドを使用して WSL システムをマウントできます。
sshfs -o ssh_command='ssh -J windowshost' -p 8022 localhost:/ <mountpoint>
WSL インスタンスは「localhost」です。これは、ジャンプホスト (Windows ホスト) の観点から見たアドレスだからです。