Назад | Перейти на главную страницу

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

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

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

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

Я понимаю, что для подключения к хосту final, ProxyCommand будет запущен до подключения к 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?

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

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

false, нет netcat.

1) Пользователь входит ssh final на localhost. Это запускает родительский процесс 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