Этот ответ предполагает, что sshd настроен на переадресацию портов на HOST_1 и HOST_2.
Вы уже нашли большую часть того, что вам нужно (второй вариант ответа Мики Фишер в вашей первой ссылке).
Туннель с локального хоста на хост1 и с хоста 1 на хост2:
ssh -L 9999:localhost:9999 host1 ssh -L 9999:localhost:1234 -N host2
Это откроет туннель от localhost до host1 и еще один туннель от host1 до host2. Однако порт 9999 для host2: 1234 может использоваться любым пользователем на host1. Это может или не может быть проблемой.
Идея состоит в том, чтобы связать воедино переадресацию портов (т.е. вы перенаправляете локальный порт на удаленный порт, который затем перенаправляете на еще более удаленный порт).
Для вашего примера команда будет
ssh -tt -L 3306:localhost:XXXX [user@]HOST_1 ssh -L XXXX:MYSQL_HOST:3306 [user@]HOST_2
где XXXX - любой порт выше 1024, который еще не используется (используйте один и тот же номер для замены обоих экземпляров)
После выполнения вам будет предложено ввести пароль дважды (один раз для HOST_1 и один раз для HOST_2), если только вы не используете ключи SSH для входа без пароля. Туннель будет работать до тех пор, пока вы остаетесь подключенным к HOST_2 через HOST_1.
Вот разбивка:
ssh
это локальный клиент SSH, который вы выполняете
-tt
принудительно назначает псевдо-tty (см. Псевдо-терминал не будет выделяться, потому что stdin не является терминалом, для чего это может понадобиться)
-L 3306:localhost:XXXX [user@]HOST_1
говорит вашему локальному SSH-клиенту перенаправить 3306 в вашей локальной системе на порт XXXX на «localhost» на другой стороне SSH-соединения. Вам нужно только указать, отличается user@
ли пользователь на вашем локальном компьютере от пользователя, к которому вы подключаетесь на HOST_1. В более общем смысле вы можете указать локальный порт, отличный от 3306, но затем укажите вашему клиенту mysql 127.0.0.1:[your выбранный порт].
ssh
(второй) Как вы, возможно, знаете, у ssh есть возможность запустить одну команду вместо запуска оболочки. Вы будете использовать это для выполнения другого сеанса SSH на HOST_1, который создаст следующую ссылку в цепочке переадресации портов.
-L XXXX:MYSQL_HOST:3306 [user@]HOST_2
Поскольку этот сеанс ssh выполняется на HOST_1, он пересылает XXXX на локальную сторону (HOST_1) (которая пересылается с 3306 на вашем клиенте) на порт 3306 на MYSQL_HOST на удаленной стороне (HOST_2). Вам нужно только указать, отличается user@
ли пользователь на HOST_1 от пользователя, к которому вы подключаетесь на HOST_2.
Если требуются дополнительные прыжки, добавьте экземпляры ssh -L XXXX:localhost:XXXX hostX
для каждого прыжка в середине, если XXXX является доступным портом на каждом сервере в пути.