SSH através de múltiplos hosts usando o ProxyCommand?

11

Eu tenho uma entrada em ~ / .ssh / config no meu computador em casa que se parece com isso:

host foo bar
    ProxyCommand ssh -x -a -q gateway.example.com nc %h 22

em que gateway.example.com é um servidor no trabalho conectado à Internet pública e a uma rede interna. A caixa de gateway resolve foo e bar usando entradas em / etc / hosts.

Meu problema é que preciso alcançar uma caixa que está do outro lado de foo . Vamos chamá-lo "baz". O host "baz" está em outra rede privada à qual foo está conectado, mas não aquele em que "gateway" está conectado.

Eu tentei usar isso:

host baz
    ProxyCommand ssh -x -a -q gateway/example.com ssh foo nc %h 22

Mas isso não funciona e estou um pouco fora da minha profundidade. Como faço isso?

Eu não acho que isso deva importar, mas estou fazendo isso no Ubuntu 10.

    
por Graham 09.03.2012 / 05:43

4 respostas

12

Fácil.

Assuma a seguinte configuração de rede:

Vocêdevesercapazdeusarumarquivo~/.ssh/configsemelhanteaeste:

hostfoobarProxyCommandssh-x-a-qgateway.example.comnc%h22hostbazProxyCommandssh-x-a-qfoonc%h22

AidéiaaquiéqueoseuSSHfazsabercomochegarao"foo", então um SSH será bem-sucedido. E a partir daí, você pode "nc" para baz. E se houver outros hosts na rede privada interna ao lado de "baz", você pode simplesmente adicioná-los à linha "host baz".

Isso basicamente trata o host "foo" como o gateway para "baz", assim como "gateway" é o gateway para "foo".

Limpar?

    
por 09.03.2012 / 05:45
13

Em relação à resposta do ghoti: em vez de usar o netcat ( "ssh ... nc %h 22" ), começando com o OpenSSH 5.4, você pode fazer isso diretamente com: "ssh -W %h:22 ..." . Dessa forma, você não precisa se preocupar se o netcat está instalado no lugar certo.

    
por 12.03.2012 / 04:55
1

Usando chaves privadas armazenadas em seu computador local, insira este comando com os caminhos-chave privados, nomes de usuário de shell e nomes de host / endereços IP alterados para as necessidades de ssh de destino local > gateway- & gt ;.

Observe que ProxyCommand é preferível ao Agente Forwarding para reduzir o risco de comprometer a autenticação da chave privada (usando o gateway e a conexão do agente ssh local para comprometer mais hosts como se o sequestrador tivesse a chave privada) quando um gateway / jumperbox é raiz seqüestrado.

Comando simples para proxy SSH para um servidor (mantenha as duas chaves privadas no computador local):

sudo ssh -i dest_private_key.pem -o "ProxyCommand ssh -W %h:%p -i gate_private_key.pem gate_user@gate_IP" dest_user@dest_IP 
    
por 03.10.2015 / 22:19
0

Isso é o que eu faço para sair da rede protegida para a Internet.

Estou usando meu laptop para trabalhar com código em build . Como o build está restrito ao acesso à Internet, para clonar um repositório do github.com, primeiro preciso pular para a toolbox , que também não tem acesso à Internet. Mas pode acessar gw , que tem Internet.

Assim:

Meu .ssh/config em construção :

Host gw
  ProxyCommand ssh -A -W %h:%p toolbox

Host github.com
  ProxyCommand ssh -A -W %h:%p gw

Explicação.

  1. O ponto de vista é de construção . Não há configurações em outros servidores.
  2. Primeiramente, declaro que, para chegar a gw , é necessário fazer isso via toolbox .
  3. Em segundo lugar, declaro que, para chegar a github.com , você precisa fazer isso via gw . Internamente, o SSH usa a regra anterior.
  4. Por fim, git clone [email protected]:aRepo/There apenas funciona!

Limpar?

    
por 21.11.2017 / 12:43

Tags