Monte a pasta do WSL para o Ubuntu via SSH com SSHFS

Monte a pasta do WSL para o Ubuntu via SSH com SSHFS

Estou tentando montar uma pasta localizada dentro do WSL em minha máquina Ubuntu 20.4 usando SSHFS, mas sempre recebo a mensagem de que "Esse arquivo ou diretório não existe". Como eu posso fazer isso?

A maneira óbvia que tentei montar o diretório foi a seguinte:

sshfs user@remotehost:"\\wsl$\Ubuntu-20.04" /home/user/Remote/

Responder1

Resposta curta:

Use o host do Windows como um jumphost ssh para acessar o WSL.

Mais detalhes:

Existem algumas armadilhas ao tentar acessar WSL (especialmente WSL2) através de ssh:

Primeiro, você pode ter se deparado com o fato de que o WSL2 é executado em um ambiente virtualizado, com um vNIC com NAT. Isso significa que os serviços executados em WSL2 não podem ser acessados ​​diretamente de outras máquinas na rede.

WSL forneceencaminhamento de host local, que permite o acesso do próprio host Windows aos serviços executados em WSL2 (via localhost:portnumber). Mas isso não se estende a outras máquinas da rede.

Você pode ver um tópico completo do Github sobre issoaquicom o link sendo diretamente para o comentário quetipicamenterecomendado para resolver isso.

Envolve:

  • Configurando regras de firewall
  • Encaminhamento de porta do Windows para a interface de rede virtual WSL2
  • O maior desafio aqui é que o endereço do vNIC muda cada vez que o WSL é reiniciado. Portanto, o script precisa excluir as regras antigas e recriá-las a cada reinicialização.

Mas, com sua edição atualizada, você parece estar tentando algo um pouco diferente, onde parece que você está tentando acessar o pseudo-compartilhamento WSL através do Windows, talvez via ssh no próprio host do Windows.

Infelizmente, isso também não funcionará porque \\wsl$\...é um sistema de arquivos de rede (usando o protocolo 9P). Isso significa que realmente nãoexistirno próprio host do Windows quando acessado via ssh.

Minha solução preferida com ssh (e portanto sshfs) é fazer uso de umhost de salto ssh. Isso contorna os problemas de "alteração do endereço vNIC" e não exige que você execute um script a cada inicialização do Windows.

Para configurar isso:

  • Instale o servidor Windows OpenSSHno host do Windows. Eu uso a porta padrão 22 para o ssh "host", mas você não precisa necessariamente fazer isso.
  • Instale e configure o SSH na sua instância WSL. Você precisará usar um número de porta diferente aqui do host do Windows. Para fins deste exemplo, usaremos port 8022. Edite seu /etc/ssh/sshd_configpara alterar a porta.
  • Opcional, mas recomendado, configure as instâncias Windows OpenSSH e WSL com sua chave pública ../ssh/authorized_keys(no Windows OpenSSH, ela está em seu %userprofile%/.sshdiretório. No Linux/WSL, é claro, está em ~/.ssh.

Agora, como (como mencionado anteriormente) o host do Windows pode acessar as instâncias WSL2 em localhost, você pode usar o SSH do Windows como um jumphost para as sessões SSH do WSL2.

Assumindo que:

  • Seu computador Windows tem um nome windowshost(substitua o nome real)
  • Você tem seu Windows OpenSSH na porta 22
  • Você tem seu servidor WSL SSH na porta 8022

Então você pode montar seu sistema WSL usando:

sshfs -o ssh_command='ssh -J windowshost' -p 8022 localhost:/ <mountpoint>

A instância WSL é “localhost” porque este é o endereço da perspectiva do jumphost (o host do Windows).

informação relacionada