Как на самом деле работает ssh ProxyCommand?

8

Мне удобно использовать функцию ProxyCommand в ssh, и я могу использовать ее для переключения между несколькими хостами-бастионами, чтобы эффективно достичь конечного хоста. Но я просто не могу понять, как это работает на самом деле.

Например, У меня есть следующий файл конфигурации.

Host final
Hostname final.com
Port 22
AgentForwarding yes
User guestuser
ProxyCommand "ssh user@bastion.com -W %h:%p"

Я понимаю, что для подключения к хосту finalProxyCommand будет работать до подключения к final.com. Но я все еще не могу понять порядок соединений.

А что делает опция -W %h:%p? Я понимаю, что это особенность netcat и похожа на nc %h %p.

Итак, насколько я понимаю, здесь последовательность операций. Пожалуйста, дайте мне знать, если я ошибаюсь. Я буду использовать файл конфигурации, указанный выше в моем примере.

  1. Пользователь вводит ssh final
  2. Соединение ssh с bastion.com создано.
  3. Туннель netcat создается от bastion.com до порта 22 final.com. Стандартный netcat подключен к оболочке, полученной в связи с bastion.com.
  4. Итак, теперь у нас есть соединение из нашей системы с final.com. Первая половина этого соединения - это ssh-соединение нашей системы с bastion.com. Вторая половина этого соединения - туннель netcat от bastion.com до final.com.
  5. Теперь ssh finalкоманда принимает вышеуказанное соединение в качестве прокси и туннелирует свои данные через это существующее соединение.

Кроме того, я также хотел бы знать, известен ли этот метод также как ssh-стекирование ?

добавлены переносы строк

Узумаки Наруто
источник

Ответы:

8

3) Создается туннель netcat от bastion.com до порта 22 final.com.

ложь, нет netcat.

1) Пользователь входит ssh finalна локальный хост. Это запускает родительский процесс ssh
2) Родительский ssh ​​создает дочерний ssh ​​с
вводом- выводом, перенаправленным на каналы 3) Дочерний ssh ​​создает соединение с bastion.com.
4) sshdПроцесс на bastion.com создает tcp-соединение с final.com:22
5) Канал ssh добавляется к существующему ssh-соединению между localhost и bastion.com
6) Родительский ssh ​​записывает данные рукопожатия в канал, дочерний ssh читает его из канала, отправляет через канал ssh на sshd на bastion.com; sshd читает его и записывает в сокет, подключенный к final.com. Точно так же данные передаются с final.com на localhost

бассейн
источник
Спасибо за Ваш ответ. Этот метод также известен как ssh Stacking или у него нет названия?
Наруто Узумаки
2
Не могли бы вы привести ссылку? Например, руководство. спец ..
qweruiop