ssh todas as máquinas atrás de um roteador

3

Eu tenho várias máquinas na minha lan. Um é usado como um proxy http para segmentar sites localizados nos outros (isso está funcionando bem agora graças ao ServerFault). No meu roteador, a porta 22 é NAT para essa máquina proxy. Eu gostaria de poder acessar as outras máquinas, dentro da internet, com algo como:

ssh user@first_machine.my_domain.tld ssh user@second_machine.my_domain.tld

Posso usar a máquina proxy para "filtrar" a solicitação ssh de entrada e encaminhá-la para a máquina correta? (da mesma forma, é possível fazer isso para sites usando uma mistura de mod_proxy e namevirtualhost no Apache)

Muito obrigado, Luc

    
por Luc 21.03.2010 / 14:45

5 respostas

4

Você pode usar uma VPN para se conectar à rede remota primeiro e depois se conectar diretamente via SSH. Isso pode ou não ser possível, pode ou não ser o que você deseja alcançar, mas funcionará.

Recomendo vivamente que exponha o menor número possível de máquinas à Internet através do mapeamento de portas! Especialmente se a autenticação interativa senha / teclado for permitida. As pessoas têm senhas fracas.

Outra sugestão pode ser conectar-se à sua máquina proxy e fazê-la explicitamente construir túneis para cada uma das máquinas que você deseja alcançar diretamente atrás do seu NAT. Você pode especificar um (ou mais) túneis SSH diretamente da linha de comando da seguinte forma:

ssh -L localport:hostnameOrIPofMachineBehindNAT:remoteMachinePort [email protected]

Onde localport é o número da porta que você precisa se conectar ao seu localhost que será encaminhado para a máquina por trás do NAT, SSH encapsulado através do seu proxy.

hostnameOrIPofMachineBehindNAT é o IP da LAN ou DNS da LAN da máquina não proxy que você deseja alcançar por trás do NAT. Frequentemente, em um intervalo de IP privado, como 10/8, 192.168 / 16 ou 172.16 / 12.

remoteMachinePort é o número da porta do serviço ao qual você deseja se conectar na máquina remota por trás do NAT. No caso de SSH, é provável que esta seja a porta padrão 22.

[email protected] é trivial, eu acho.

Você pode se conectar à sua outra máquina assim de outro shell local:

ssh usernameOnRemoteBoxBehindNat@localhost

Como uma linha de comando pode facilmente tornar muito tediosa a digitação, é muito melhor incluir tudo isso, com quantas opções SSH você quiser, e quantos tunelamentos de portas você quiser no arquivo ~/.ssh/.ssh_config . Isso reduzirá sua digitação para ssh connectionNickname e sempre terá todos os encaminhamentos e opções definidos automaticamente.

Veja man 5 ssh_config para uma explicação detalhada e lista de opções de configuração que você pode usar em ~/.ssh/.ssh_config .

    
por 21.03.2010 / 15:29
4

Você pode configurar isso no arquivo .ssh/config para configurar um túnel automaticamente

link

basicamente você acabou de adicionar algo como

Host machinebehindrouter
ProxyCommand  ssh user@externalhost nc %h %p
    
por 21.03.2010 / 16:56
3
  • Você pode ssh para uma máquina primeiro, então ssh da máquina para o outras. Talvez use ssh-keys para fazer login mais fácil.
  • Ou você pode alterar a porta em cada máquina e NAT corretamente.

Eu iria com a primeira opção e protegeria as outras máquinas para permitir apenas o ssh da primeira máquina.

    
por 21.03.2010 / 14:49
1

Outras pessoas fizeram boas sugestões, mas acho que a resposta mais simples e mais flexível já estava contida na sua pergunta quando você deu um exemplo de comando. Ou seja, se tivermos um host de origem, um host intermediário e um host de destino; e como ssh pode executar comandos em um host remoto para nós, você pode executar este comando a partir do host de origem:

ssh -t $intermediate ssh $destination

Naturalmente, você pode adicionar outras opções, conforme necessário, ao comando ssh ou gravar um wrapper de shell (script, alias, função) para manipular quaisquer variáveis. O -t flag força a alocação de uma pseudo-tty, o que eu acho necessário, mas você pode testar a conexão sem ela para ter certeza. Além disso, se você criar pares de chaves pública / privada para cada host da cadeia e usar o ssh-agent, poderá evitar a digitação de senhas.

    
por 22.03.2010 / 20:02
1

Eu verificaria apenas a conexão com sua caixa de proxy ou outro host, depois use o utilitário GNU screen para ter várias sessões sendo executadas em suas outras caixas.

Como bônus, você aprenderá a usar o screen , que é um aplicativo fantástico que todos devem conhecer mais!

    
por 22.03.2010 / 20:12