Мне удобно использовать функцию 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
.
Итак, насколько я понимаю, вот последовательность операций. Пожалуйста, дайте мне знать, если я ошибаюсь. В моем примере я буду использовать указанный выше файл конфигурации.
ssh final
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