EDIT: A maior parte desta resposta ajuda você a ssh
a uma caixa na sua rede interna sem problemas. Veja abaixo na seção " Trabalhando com outros recursos de rede " para ler mais sobre isso.
Você também pode fazer isso de maneira muito elegante com o SSH:
Passo 1 : configure / escolha uma caixa de salto
Muitas redes corporativas têm o que normalmente é chamado de "bastião host" ou uma caixa de salto. Esta máquina normalmente tem muitos de seus serviços de rede desabilitados, salve o ssh (e freqüentemente em uma porta não padrão). Se você não tem uma máquina como essa na sua rede de 'servidores', encontre uma caixa que possa ser acessada via ssh da sua rede interna para testar.
Passo 2 : Edite seu arquivo de configuração ssh
Encontre seu arquivo de configuração ssh (geralmente em ~/.ssh/config
) e ative seu editor de texto favorito. Digamos que sua caixa de salto esteja em jump.foo.com
e um dos hosts que você deseja acessar esteja em server.foo.com
. Inclua o seguinte:
Host server.foo.com
User <username>
ProxyCommand /usr/bin/nc -x localhost:1080 %h %p
Host jump.foo.com
User <username>
DynamicForward localhost:1080
substituindo <username>
pelo seu nome de usuário. Você também pode precisar editar o caminho para nc
(netcat): observe que este é o caminho para o netcat em seu host local. Caso a configuração não faça 100% de sentido, vou dividi-lo:
O jump.foo.com
config inclui uma diretiva para iniciar um proxy SOCKS escutando na porta especificada (no meu exemplo, porta 1080). Isto significa que quando você ssh para jump.foo.com
, você também está iniciando um proxy SOCKS automaticamente ... fique ligado.
O server.foo.com
config diz: quando eu ssh para server.foo.com
, executo o ProxyCommand especificado:
/usr/bin/nc -x localhost:1080 %h %p
em que a opção -x
permite especificar o endereço de proxy (nesse caso, a conexão em localhost
na porta 1080 que acabamos de abrir), %h
= host e %p
= porta.
Etapa 3 : ssh
ssh para jump.foo.com
(eu uso tmux , um tela alternativa, e sempre tem uma janela aberta com uma conexão para o meu jump.foo.com
). Agora, em uma janela / terminal separada, tente simplesmente ssh diretamente para server.foo.com
. Devo observar que server.foo.com
pode ser um nome de host interno ou e endereço IP interno (em sua rede de servidores).
Assumindo que você acertou tudo, você deve passar para server.foo.com
sem problemas.
Existem várias maneiras de tornar esse processo mais simples, com configurações ssh e aliases de bash mais robustas. Aqui estão alguns artigos que usei como referência há algum tempo, quando o configurei, o que deve apontar na direção certa:
link
link
link
Trabalhando com outros recursos de rede
Digamos que você precisa da área de trabalho remota em um host windows.foo.com
em sua rede de 'servidores'. Em uma janela,
ssh -L 3390:windows.foo.com:3389 jump.foo.com
Isso encaminha todo o tráfego na porta 3390 em localhost
para a porta 3389 (a porta de área de trabalho remota padrão) em windows.foo.com
. Para realmente chegar em windows.foo.com
, aponte seu aplicativo de área de trabalho remota para localhost:3390
e você poderá se conectar de forma transparente a windows.foo.com
.
man ssh
ou Google "ssh port forwarding" para mais informações.
Lembre-se também de que você sempre pode
telnet <server> <port>
para ter certeza de que você pode falar com <server>
on port
, a la
telnet localhost 3390
Adicionando novos hosts na rede foo.com
Você não precisará configurar uma entrada para cada servidor na sua caixa de salto. Apenas
ssh -o "ProxyCommand /usr/bin/nc -x localhost:1080 %h %p" new.server.foo.com
E sim, você deve ser capaz de acessar hosts na sua rede interna por nome de host ou IP.
Assim como definimos em nosso arquivo de configuração ssh, você pode passar o argumento ProxyCommand para ssh com a opção -o
. Novamente, isso deve enviar seu tráfego ssh para new.server.foo.com
através do mesmo proxy SOCKS na porta 1080.
Para cada domínio foo.com
, você pode simplesmente adicionar uma regra curinga no seu arquivo de configuração ssh:
Host *.foo.com
User <username>
ProxyCommand /usr/bin/nc -x localhost:1080 %h %p
Se você quiser ssh para um host que não tenha uma entrada no seu arquivo de configuração, você também pode usar um alias bash:
alias ssh-socks='ssh -o "ProxyCommand /usr/bin/nc -x localhost:1080 %h %p"'
ssh-socks newer.server.foo.com
Não tenho certeza se a solicitação de DNS é feita pelo seu localhost
ou se isso acontece na caixa de salto. Eu tentei um tcpdump em localhost
quando ssh'ing para alguns hosts na minha rede 'servidor'
tcpdump port 53
e realmente não vi nenhum tráfego (não entra em / etc / hosts ... eu teria que fazer um pedido de DNS para acertar o host). Isso pode significar que as solicitações de DNS são feitas a partir da caixa de salto, mas não posso estar 100% confiante.