passando parâmetros para encaminhamento de porta SSH remoto

passando parâmetros para encaminhamento de porta SSH remoto

Eu tenho um servidor remoto atrás de dois gateways, conforme mostrado na figura. gw1está aberto ao mundo exterior, enquanto gw2só é acessível a partir de gw1. Serversó é acessível gw2e pode ser um entre vários servidores possíveis. Quero configurar o encaminhamento de porta sshde forma que 443da minha máquina cliente seja encaminhado automaticamente para 2000on gw1. Este não é o problema. Eu tenho:

HostName gw1
User user
ForwardAgent yes
LocalForward 443 localhost:2000

E isso funciona perfeitamente. Agora quero 2000que from gw1seja encaminhado para 443quando eu for . Eu posso fazer:Servergw2sshgw2

HostName gw2
LocalForward 2000 Server:443

Existe alguma maneira de passar o IP do servidor como parâmetro, já que pode ser diferente a cada vez?

configuração de rede

Responder1

Suponha que você não se importe com a porta 2000. Seu objetivo é apenas encaminhar a porta 443 do cliente para o servidor. E suponha que você tenha hosts server1, server2, server3, ... na função de servidor. Se você adicionar isso ao seu .ssh/config:

Match host server*
ProxyCommand ssh gw1 nc gw2 22
LocalForward 443 %h:443

Então, por exemplo, ssh server1conectar-se-á através de gw1 a gw2 e encaminhará 443 de lá para server1.

O que isso faz: ProxyCommanddiz ao ssh para conectar-se primeiro ao gw1 e canalizar a saída padrão para nc gw2 22, que encaminha esse fluxo para gw2 na porta 22. Isso cria um túnel para entrada padrão no cliente através de gw1 para gw2:22. ssh então abre uma segunda sessão ssh através desse túnel para gw2. Uma vez estabelecido, LocalForwardencaminha a porta 443 para server1 ( %hsendo o nome do host que você forneceu na linha de comando).

Consulte man ssh_config para ler sobre Match e ProxyCommand.

Observe que, embora o comando seja ssh server1, ele realmente conecta o ssh até gw2 e encaminha a porta 443 a partir daí. Um shell seria aberto no gw2, não no server1. Portanto, você pode querer executar ssh -N server1, para evitar a abertura do shell, já que o objetivo é apenas encaminhar a porta. Infelizmente não há equivalente a -N em .ssh/config, mas você pode adicionar algo como LocalCommand waitpara conseguir a mesma coisa - o shell apenas esperaria até ser interrompido e não haveria nenhum prompt do shell.

informação relacionada