Понимание туннелей SSH

15

У меня есть сервер Linux (Ubuntu), доступ к которому у меня есть только через ssh (порт 22). На этом сервере есть база данных MySQL, прослушивающая порт 3306. Можно ли использовать putty (на моей машине) и туннелирование (на машине linux) для создания туннеля от локального порта на моей машине (скажем, 4000) до сервер linux на порт 22 а потом с сервера себе на порт 3306?

Мухаммед Гелбана
источник

Ответы:

20

Я нарисовал несколько набросков

Машина, на которой набрана команда ssh tunnel (или в вашем случае: Putty with tunneling запущена) называется « ваш хост» .

SSH туннель, начиная с локального


SSH туннель, начиная с удаленного

Вступление

  1. местный: -L Specifies that the given port on the local (client) host is to be forwarded to the given host and port on the remote side.

    ssh -L sourcePort:forwardToHost:onPort connectToHostозначает: подключиться с помощью ssh к connectToHostи перенаправить все попытки подключения на локальный sourcePort порт onPortна вызываемом компьютере, доступ к forwardToHostкоторому можно получить с connectToHostкомпьютера.

  2. удаленный: -R Specifies that the given port on the remote (server) host is to be forwarded to the given host and port on the local side.

    ssh -R sourcePort:forwardToHost:onPort connectToHostозначает: подключиться с помощью ssh connectToHostи перенаправить все попытки подключения к удаленному sourcePort порту onPortна вызываемую машину, доступ к forwardToHostкоторой можно получить с локальной машины.

Ваш пример

Первое изображение представляет вашу ситуацию. Синее поле называется your hostвашей машиной с Windows, с которой вы запускаете Putty на свой сервер Ubuntu, называемое remotehostмоим образом. Подключение к зеленому порту (в вашем случае номер порта 4000) пересылается в розовый MySQL порт 3306из localhostвашего компьютера сервера Ubuntu (то есть сам сервер Ubuntu).

Чтобы установить его с Putty

Запустите Putty и введите свои обычные настройки соединения (имя хоста или IP-адрес). В дереве слева перейдите к

Подключение → SSH → Туннели

и создайте новый локальный туннель с исходным портом 4000(123 на изображении) и местом назначения localhost:3306(localhost: 456 на изображении).

Не забудьте нажать кнопку Добавить .

Затем вернитесь к сеансу и нажмите « Сохранить», чтобы сохранить настройки в следующий раз. Теперь вы можете использовать сохраненное соединение для входа на сервер и после успешного входа в систему каждый раз, когда вы подключаетесь к порту 4000 на вашем хосте, вы фактически подключаетесь к порту 3306 на сервере Ubuntu.

создать прямой туннель с замазкой

Erik
источник
Очень хорошо, спасибо за иллюстрацию. Я ценю, что вы добавили туннели «удаленного» типа, которые я не рассмотрел в своих ответах.
Guss
1
Этот ответ потрясающий
Маурисио Паскье Хуан
2
Удивительный и очень показательный ответ +1
rkachach
1
Как это имеет так мало голосов, это позор.
Райан Фишер
1
Я люблю эти зарисовки. Картинка стоит тысячи слов.
квартал
16

Простой ответ - да, но учтите, что на вашем компьютере фактически запущен туннель. Это работает так, что вы создаете SSH-соединение с сервером (которое является безопасным), а затем инструктируете SSH прослушивать порт на вашей стороне и перенаправлять любые входящие соединения - на конкретный порт с определенным адресом хоста на серверная сторона. Целевым объектом туннеля не обязательно должен быть тот же сервер - это может быть любой другой действительный адрес, который - в случае, если это не сервер, на котором работает сам сервер SSH - будет видеть входящее соединение, как если бы оно было получено с сервера SSH вместо от вашего клиента.

Чтобы настроить его, откройте диалоговое окно конфигурации Putty, выберите настройку соединения, которое вы обычно используете для доступа к вашему серверу, и нажмите «загрузить» (а не «открыть»). Затем в дереве слева перейдите к Connection-> SSH-> Tunnels и создайте новый «локальный» туннель с исходным портом 4000 и целевым «localhost: 3306» (поскольку адрес назначения разрешен на сервере, с точки зрения сервера порт MySQL находится на локальном хосте). Затем вернитесь к «сессии» и нажмите «Сохранить», чтобы сохранить настройки в следующий раз. Теперь вы можете использовать сохраненное соединение для входа на сервер и после успешного входа в систему каждый раз, когда вы подключаетесь к порту 4000 на вашем компьютере, вы фактически подключаетесь к порту 3306 на сервере.

Если вы серьезно относитесь к туннелям и используете клиент MS-Windows, то я предлагаю взглянуть на Putty Tunnel Manager, который использует Putty для простой настройки и запуска туннелей без необходимости иметь открытую консоль putty.

Guss
источник