Como o ssh ProxyCommand realmente funciona?

8

Estou confortável em usar o recurso ProxyCommand do ssh e posso usá-lo para percorrer vários hosts bastiões para alcançar o host final com eficiência. Mas eu simplesmente não consigo entender como ele realmente funciona no back-end.

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"

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

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

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

  1. O usuário entra ssh final
  2. Uma conexão ssh com o bastion.com criada.
  3. Um túnel netcat é criado a partir do bastion.com até a porta 22 do final.com. O stdin do netcat está conectado ao shell obtido na conexão com o bastion.com.
  4. Então agora temos uma conexão do nosso sistema para o final.com. A primeira metade dessa conexão é uma conexão ssh do nosso sistema para o bastion.com. A segunda metade dessa conexão é um túnel netcat de bastion.com para final.com.
  5. O ssh finalcomando Now toma a conexão acima como um proxy e encapsula seus dados através dessa conexão existente.

Além disso, eu também gostaria de saber se essas técnicas também são conhecidas como empilhamento ssh ?

linebreaks adicionados

Naruto Uzumaki
fonte

Respostas:

8

3) Um túnel netcat é criado a partir do bastion.com até a porta 22 do final.com.

false, não há netcat.

1) O usuário entra ssh finalno host local. Isso inicia o processo pai ssh
2) O pai ssh cria um filho ssh com E / S redirecionada para pipes
3) O filho ssh cria uma conexão com o bastion.com.
4) O sshdprocesso em bastion.com cria uma conexão tcp com final.com:22
5) Um canal ssh é adicionado à conexão ssh existente entre localhost e bastion.com
6) O pai ssh grava os dados do handshake no pipe, o filho ssh lê do canal, envia pelo 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 do final.com para o host local

bacia
fonte
Obrigado pela sua resposta. Essa técnica também é conhecida como empilhamento ssh ou não tem nome?
Naruto Uzumaki
2
Você poderia citar uma referência? Por exemplo, manual. especificação ..
qweruiop 08/07/2015