Posso usar o SSH para servir um recurso encapsulado (página HTML) em uma rede local?

0

Eu tenho um recurso hospedado remotamente (webapp) que tenho que encapsular em um servidor para acessar remotamente. Posso concluir o comando de encaminhamento de porta local usando -L e, em seguida, acessar o recurso remoto em localhost:port no meu navegador.

Para simplicidade e persistência, gostaria de fazer um túnel para o host remoto (usando SSH com minha chave), mas veicular a página da Web localmente, para que eu possa acessá-la usando computadores diferentes na minha rede local.

Por exemplo:

Old way:
Remote-server  --|SSH_Tunnel|--  Local-host:port

New way:
Remote-server  --|SSH_Tunnel|--  Local-host:port || local-net:port == local_http-traffic == different-local-computer
    
por user3.1415927 29.05.2018 / 21:39

1 resposta

1

tl; dr? Use ssh -g … .

Eu assumo que o comando que você está usando é como

ssh -L 1234:server:5678 ssh_server

Isso escutará 127.0.0.1:1234 (IPv4) e [::1]:1234 (IPv6) no lado local. As conexões locais com qualquer um desses endereços alcançarão server:5678 do ssh_server . Outros computadores em sua rede local não podem alcançar o túnel porque 127.0.0.1 e [::1] são endereços de loopback; para qualquer máquina, elas significam a própria máquina.

Para disponibilizar seu túnel para outros computadores, vincule-o a um endereço que ele possa alcançar. Digamos que 192.168.0.14 seja um endereço válido do cliente que executa ssh ; ligar a ele:

ssh -L 192.168.0.14:1234:server:5678 ssh_server

ou para todos os endereços disponíveis (escolha um comando):

ssh -L 0.0.0.0:1234:server:5678 ssh_server                            # IPv4
ssh -L [::]:1234:server:5678 ssh_server                               # IPv6
ssh -L 0.0.0.0:1234:server:5678 -L [::]:1234:server:5678 ssh_server   # IPv4 and IPv6

O último túnel "aberto" também pode ser criado com -g . De man 1 ssh :

-g Allows remote hosts to connect to local forwarded ports.

-g é equivalente a -o GatewayPorts=yes e a GatewayPorts yes configurada no arquivo ssh_config . Este trecho de man 5 ssh_config explica ainda melhor:

GatewayPorts
Specifies whether remote hosts are allowed to connect to local forwarded ports. By default, ssh(1) binds local port forwardings to the loopback address. This prevents other remote hosts from connecting to forwarded ports. GatewayPorts can be used to specify that ssh should bind local port forwardings to the wildcard address, thus allowing remote hosts to connect to forwarded ports. The argument must be yes or no. The default is no.

Então:

ssh -g -L 1234:server:5678 ssh_server

Notas:

  • Não se esqueça de abrir a porta escolhida no seu firewall.
  • Você pode encontrar autossh útil…
  • … juntamente com a opção ExitOnForwardFailure de ssh (explicada em man 5 ssh_config ).
  • Em geral, um servidor HTTP pode rejeitar URLs que não considera como próprios. Você disse que localhost:port funciona no seu navegador. Caso URLs como http://192.168.0.14:1234 não funcionem apesar do túnel, verifique a configuração do servidor.

Recursos adicionais:

por 29.05.2018 / 23:33