SSH: o servidor local possui um IP público; Remoto não

2

A máquina local tem um IP público.

A máquina remota está sendo executada em um site de clientes. Eu tenho acesso total a esta máquina, mas ela não possui um IP público. No momento, estamos usando o TeamViewer para acessar remotamente esta máquina, mas preferimos usar uma solução baseada em x11vnc.

Existe algum tipo de daemon ou software que eu possa rodar na máquina remota, de modo que quando ele for inicializado, eu possa ssh nele (talvez através de um túnel?).

(123.45.6.78)
  local             .-,(  ),-.    
   __  _         .-(          )-.                             Remote 
  [__]|=|  ---->(    internet    )-------> __________ ------> ____   __ 
  /::/|_|        '-(          ).-'        [_...__...°]       |    | |==|
                     '-.( ).-'                               |____| |  |
                                                             /::::/ |__|
    
por nishantjr 17.02.2014 / 08:18

1 resposta

4

A solução abaixo funcionará da seguinte maneira:

  Local             .-,(  ),-.    
   __  _         .-(          )-.           Gateway             RemoteX
  [__]|=|  ---->(    internet    )-------> __________ ------> ____   __ 
  /::/|_|        '-(          ).-'        [_...__...°]       |    | |==|
                     '-.( ).-'                               |____| |  |
                                                             /::::/ |__|

Você pode fazer isso através do recurso ProxyCommand do ssh. Adicione o seguinte ao seu arquivo $HOME/.ssh/config . Crie-o se não existir apenas com este conteúdo:

Host RemoteX
    User userint
    ProxyCommand ssh userext@Gateway nc RemoteX %p
Host RemoteY
    User userint
    ProxyCommand ssh userext@Gateway nc RemoteY %p

Você se conecta aos diferentes servidores remotos internos assim:

$ ssh RemoteX

-or-

$ ssh RemoteY

Esta é a ponta do iceberg no que diz respeito a esse recurso. Veja este P & D de Perguntas e Respostas intitulado: , para mais detalhes.

NOTA: O método acima está fazendo uso de uma ferramenta chamada nc (netcat), que deve estar nos repositórios de qualquer das principais distribuições.

Exemplo complexo

  1. Uma estrofe Host , muitos hosts.

    Host *.mydom.com *
        ProxyCommand ssh externalserver nc %h %p
    
  2. Uma estrofe "Hosts" para muitos usuários.

    Adicione a sub-rotina Hosts ao arquivo /etc/ssh/ssh_config do sistema para que qualquer pessoa que faça login na caixa possa utilizá-lo.

E se o IP do gateway mudar

Se você tem a situação em que os sistemas no final "remoto" flutuam, você pode usar um serviço DNS dinâmico (DDNS) como noip . Há dúzias desses serviços, alguns gratuitos e outros pagos.

A idéia básica com esses serviços é que eles lhe fornecerão um nome estático, como me.noip.org , e você executará uma pequena ferramenta de daemon no cliente "remoto". No seu caso, poderia ser o sistema Gateway ou até mesmo um dos sistemas remotos. Esse daemon obteria o IP do Gateway que atualmente está designado na Internet e o encaminha para o serviço DDNS, que o listaria como o IP atual para me.noip.org . À medida que muda, é atualizado ao longo do tempo.

    
por 17.02.2014 / 08:22

Tags