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_config
para 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%/.ssh
diretó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).