SSH através de vários hosts usando 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

onde gateway.example.comexiste 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 do outro lado foo. Vamos chamá-lo de "baz". O host "baz" está em outra rede privada à qual o foo está conectado, mas não aquele ao qual o "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 eu faço isso?

Acho que não deveria importar, mas estou fazendo isso no Ubuntu 10.

Respostas:


13

Fácil.

Suponha a seguinte configuração de rede:

exemplo de configuração de rede

Você deve conseguir usar um arquivo ~ / .ssh / config semelhante a este:

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

host baz
    ProxyCommand ssh -x -a -q foo nc %h 22

A idéia aqui é que o SSH não sabe como chegar a "foo", portanto, um SSH não será bem sucedida. E a partir daí, você pode "nc" to baz. E se houver outros hosts na rede privada interna ao lado de "baz", basta adicioná-los à linha "host baz".

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

Claro?


13

Em relação à resposta das ghoti: em vez de usar netcat ( "ssh ... nc %h 22"), começando com 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.


1
Ótimo ponto, obrigado. Esta é uma pergunta antiga, mas devo esclarecer que, enquanto eu estava executando o Ubuntu na minha estação de trabalho, o "gateway" do servidor era um antigo Busybox Linux com OpenSSH 5.3, e os servidores "foo" e "baz" eram FreeBSD (OpenSSH 5.4) Então, eu precisaria de pelo menos um netcat de qualquer maneira.
Graham

@ Graham No. É apenas o cliente que precisa ter 5,4 ou mais para -Wtrabalhar. Ele se baseia no código de encaminhamento de porta no lado do servidor, que é muito mais antigo.
Kasperd

1

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

Observe que o ProxyCommand é preferível ao Agent Forwarding para reduzir o risco de comprometer a autenticação de chave privada (usando o gateway e a conexão local do agente ssh para comprometer hosts adicionais como se o seqüestrador tivesse a chave privada) quando um gateway / jumperbox é invadido por root.

Comando único para proxy SSH em 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 

0

É isso que faço para sair da rede protegida para a Internet.

Estou usando meu laptop para trabalhar com código na compilação . Como a compilação é restrita ao acesso à Internet, para clonar um repositório do github.com, primeiro preciso entrar na caixa de ferramentas , que também não tem acesso à Internet. Mas ele pode acessar o gw , que tem Internet.

Como isso:

Esquema de salto SSH

Meu .ssh/configna 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 é da compilação . Não há configurações em outros servidores.
  2. Primeiro, declaro que, para chegar ao GW, você precisa fazer isso via caixa de ferramentas .
  3. Segundo, declaro que, para chegar ao github.com , você precisa fazer isso via gw . Internamente, o SSH usa a regra anterior.
  4. Em última análise, git clone git@github.com:aRepo/Thereapenas funciona!

Claro?

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.