SSH туннелирование и проброс портов — это технология защищенного перенаправления сетевого трафика через зашифрованное соединение с удаленным сервером. Для настройки необходимо определить локальный и удаленный порты, использовать утилиту SSH-клиента и указать адрес сервера в командной строке или конфигурационном файле.
Зачем нужен проброс портов SSH туннелирования
- Безопасная передача трафика между локальной машиной и удаленным сервером через зашифрованный канал
- Обход блокировок и файрволов корпоративной сети
- Защита конфиденциальных данных при подключении к удаленным сервисам (базам данных, веб-приложениям)
- Организация доступа к внутренним ресурсам компании через интернет без открытия прямого доступа
- Шифрование трафика приложений, которые не поддерживают собственное шифрование
Пошаговая инструкция по настройке локального туннелирования
- Откройте терминал или командную строку на локальной машине.
- Выполните команду:
ssh -L локальный_порт:целевой_хост:целевой_порт пользователь@ssh_сервер - Замените
локальный_портна номер порта на вашей машине (например, 3306). - Замените
целевой_хостна IP-адрес или имя сервера, к которому нужен доступ (например, 192.168.1.100). - Замените
целевой_портна порт целевого сервиса (например, 3306 для MySQL). - Замените
пользователь@ssh_серверна учетные данные (например,Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript. ). - Введите пароль SSH-сервера или используйте ключ аутентификации.
- После успешного подключения туннель будет активен; трафик с локального порта будет перенаправляться через SSH.
- Обращайтесь к приложению на локальной машине через адрес
localhost:локальный_порт. - Для закрытия туннеля нажмите
Ctrl+Cв терминале.
Пошаговая инструкция по настройке удаленного туннелирования
- Откройте терминал на локальной машине.
- Выполните команду:
ssh -R удаленный_порт:локальный_хост:локальный_порт пользователь@ssh_сервер - Замените
удаленный_портна порт на SSH-сервере (например, 9000). - Замените
локальный_хостна IP локальной машины или localhost. - Замените
локальный_портна порт локального приложения (например, 8080). - Замените
пользователь@ssh_серверна учетные данные SSH-сервера. - Пройдите аутентификацию по паролю или ключу.
- Удаленный туннель будет активен; трафик на удаленном портре будет перенаправляться на локальную машину.
- Для завершения нажмите
Ctrl+C.
Постоянная настройка в конфигурационном файле SSH
- Откройте файл конфигурации SSH:
~/.ssh/config(Linux/macOS) илиC:\Users\ваше_имя\.ssh\config(Windows). - Если файла не существует, создайте его в текстовом редакторе.
- Добавьте следующий блок конфигурации:
Host туннель_имя
HostName ssh.example.com
User admin
LocalForward локальный_порт целевой_хост:целевой_порт
IdentityFile ~/.ssh/id_rsa
- Замените
туннель_имяна удобное имя подключения (например, database_tunnel). - Замените
ssh.example.comна адрес вашего SSH-сервера. - Замените
adminна имя пользователя SSH. - Замените
локальный_порт,целевой_хостицелевой_портна реальные значения. - Сохраните файл.
- Для подключения выполните команду:
ssh -N туннель_имя - Флаг
-Nзапретит открытие интерактивной оболочки и оставит только туннель активным.
Использование SSH ключей вместо пароля
- Если ключи SSH еще не созданы, выполните:
ssh-keygen -t rsa -b 4096 - Нажимайте
Enterдля принятия значений по умолчанию или укажите кастомный путь. - Введите пароль для защиты ключа (опционально).
- Скопируйте открытый ключ на SSH-сервер:
ssh-copy-id -i ~/.ssh/id_rsa.pub пользователь@ssh_сервер - Введите пароль SSH-сервера для завершения копирования.
- После этого подключения будут работать без запроса пароля.
- Для повышения безопасности отключите парольную аутентификацию на сервере в файле
/etc/ssh/sshd_config(установитеPasswordAuthentication no).
Частые ошибки и их решение
- Если туннель не подключается, проверьте доступность SSH-сервера:
ping ssh.example.com - Убедитесь, что SSH-сервис запущен на удаленной машине:
sudo systemctl status ssh(Linux). - Проверьте, что локальный порт не занят другим приложением:
netstat -an | grep локальный_порт(Linux/macOS). - Если появляется ошибка прав доступа, установите правильные разрешения на файл ключа:
chmod 600 ~/.ssh/id_rsa - Для отладки используйте флаг
-v:ssh -v -L локальный_порт:целевой_хост:целевой_порт пользователь@ssh_сервер
Часто задаваемые вопросы
Чем отличается локальный туннель от удаленного? Локальный туннель перенаправляет трафик с локальной машины на удаленный сервер (флаг -L), удаленный туннель делает локальное приложение доступным через удаленный сервер (флаг -R).
Можно ли использовать SSH туннель для шифрования трафика базы данных? Да, это основное назначение; настройте локальный туннель на порт базы данных и подключайтесь к localhost вместо прямого подключения к удаленному серверу.
Что делать, если соединение прерывается? Добавьте в конфиг SSH параметры ServerAliveInterval 60 и ServerAliveCountMax 3 для автоматического сохранения соединения.