Estou executando um servidor SSH no WSL2 em uma máquina WIN10. Para fazer esse trabalho estou usando:
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=22 connectaddress=172.19.237.178 connectport=22
Isso funciona bem inicialmente. 172.19.237.178
é o IP da VM WSL2.
Há apenas um problema. Eu tenho o sshd configurado para rodar quando o PC inicializa, e toda vez que eu inicializo a máquina, o WSL2 tem um IP diferente. Existe alguma maneira de configurar o WSL2 para usar um IP estático?
Editar: consulte esta pergunta para obter uma solução alternativa para determinar o IP da máquina WSL.
O endereço IP de uma máquina WSL2 não pode ser estático, mas pode ser determinado usando
wsl hostname -I
Com base nisso, consegui criar o seguinte script powershell que iniciará o sshd em minha máquina WSL e roteará o tráfego para ele.
Eu adicionei o seguinte ao meu arquivo sudoers via visudo para evitar a necessidade de uma senha para iniciar o sshd
Por fim, de um terminal administrativo do powershell, agendei meu script para ser executado na inicialização
Não há necessidade de usar scripts para obter o ip, basta usar o servidor Openssh para Windows e alterar o shell padrão de c:/system32/cmd.exe para c:/system32/bash.exe:
https://docs.microsoft.com/en-US/windows-server/administration/openssh/openssh_server_configuration
Esta solução me ajudou a configurar um ip estático do meu wsl, tente:
Execute isso em sua máquina host do Windows:
E isso na sua máquina wsl linux:
Mas para manter esse IP após a reinicialização do sistema, você precisa configurar esses comandos no script de inicialização.
Usar wsl e wsl2 ao mesmo tempo me causou problemas. Não foi possível obter o nome de host wsl correto do comando powershell:
Com base na resposta de Nick, eu precisava encaminhar web 80 e 443, juntamente com algumas outras portas de aplicativos.
Minha cabeça simples, eu executo este script manualmente (executo como administrador) toda vez que preciso fazer proxy de uma porta para WSL.
proxyport.bat
Em seguida, mais uma etapa no terminal WSL:
Espero que ajude alguém como eu. :)
Não tenho reputação suficiente para comentar, então coloquei minha própria resposta, mas a resposta aprovada por Nick ( https://superuser.com/a/1619390/1023342 ) é a boa para mim, espere por um pequeno detalhe, para mim
wsl hostname -I
retorna dois IP ("IP1 IP2") e eu quero primeiro, eu então faço:Aqui está uma solução muito compacta para WSL2 que iniciará automaticamente o servidor SSH. Ele elimina ter que lidar com as políticas de assinatura/execução do Powershell e ter que executá-lo em um cronograma.
Execute
wsl sudo nano /etc/wsl.conf
e adicione estas linhas:Isso iniciará automaticamente o servidor SSH em cada inicialização do WSL.
(Opcional) Se você quiser usar uma porta personalizada (como
2022
) para SSH (por exemplo, se usar várias distribuições WSL), execute:Isso funciona porque o WSL2 mapeia as portas de suas distribuições para o localhost do Windows. Agora você pode simplesmente se conectar ao seu host usando
localhost:22
(ou uma porta personalizada).Iniciar wsl
No terminal (wsl)
sudo ifconfig eth0 172.27.100.100 máscara de rede 255.255.255.0 transmissão 172.27.255.255
En Powershell
netsh interface ip set address name="vEthernet (WSL)" static 172.27.100.99 255.255.255.0 172.27.255.255
Acesso a wls para windows 172.27.100.99 Acesso a windows para wls 172.27.100.100