Como o ssh ProxyCommand realmente funciona?

6

Estou confortável com o uso do recurso ProxyCommand do ssh e posso usá-lo para pular através de vários hosts bastiões para alcançar o host final de forma eficiente. Mas eu simplesmente não consigo entender como isso realmente funciona no backend.

Por exemplo. Eu tenho o seguinte arquivo de configuração.

Host final
Hostname final.com
Port 22
AgentForwarding yes
User guestuser
ProxyCommand "ssh [email protected] -W %h:%p"

Compreendo que, para conectar-se ao host final , o ProxyCommand será executado antes de estabelecer a conexão com final.com . Mas ainda não consigo entender a ordem das conexões.

E o que a opção -W %h:%p faz? Eu entendo que é o recurso netcat e é semelhante a nc %h %p .

Então, tanto quanto o meu entendimento vai aqui é a seqüência de operações. Por favor, deixe-me saber se estou errado. Eu vou estar usando o arquivo de configuração especificado acima no meu exemplo.

  1. O usuário insere ssh final
  2. Uma conexão ssh para bastion.com criado.
  3. Um túnel netcat é criado de bastion.com para a porta 22 de final.com. O stdin de netcat é conectado ao shell obtido na conexão para bastion.com.
  4. Então agora temos uma conexão do nosso sistema para o final.com. A primeira metade desta conexão é uma conexão ssh do nosso sistema para bastion.com. A segunda metade de essa conexão é um túnel netcat de bastion.com para final.com.
  5. Agora o comando ssh final usa a conexão acima como proxy e tunela seus dados através desta conexão existente.

Além disso, também gostaria de saber se essa técnica também é conhecida como ssh stacking ?

adicionou quebras de linha

    
por Naruto Uzumaki 08.10.2013 / 12:35

1 resposta

7

3) A netcat tunnel is created from bastion.com to port 22 of final.com.

false, não há netcat.

1) O usuário insere ssh final no host local. Isso inicia o processo pai ssh
2) O pai ssh cria um filho ssh com E / S redirecionado para pipes | 3) O filho ssh cria uma conexão com bastion.com.
4) O processo sshd no bastion.com cria uma conexão tcp para final.com:22
5) Um canal ssh é adicionado à conexão ssh existente entre localhost e bastion.com
6) Pai ssh grava os dados do handshake no pipe, o filho ssh o lê do pipe, envia através do canal ssh para sshd no bastion.com; O sshd lê e grava no soquete conectado ao final.com. Da mesma forma, os dados são transmitidos de final.com para localhost

    
por 08.10.2013 / 13:24