SSH (Secure Shell) є потужним протоколом забезпечення віддаленого доступу, який використовується для безпечної комунікації між вузлами в мережі. Одним з його корисних функціональних можливостей є локальне перенаправлення портів, яке дозволяє перенаправляти трафік між локальним і віддаленим хостами через безпечний тунель SSH. У цій статті ми розглянемо налаштування локального перенаправлення портів за допомогою бібліотеки sshtunnel у Python, яка надає зручний інтерфейс для взаємодії з SSH-тунелями у програмах на Python.
Перш ніж розглядати сам процес налаштування, давайте коротко розберемося, що таке локальне перенаправлення портів у контексті SSH. Цей механізм дозволяє перенаправляти з’єднання, які надходять на вказаний локальний порт, на вказаний віддалений хост і порт через SSH-тунель. Це дуже корисно, наприклад, коли вам потрібно отримати доступ до веб-сервера або бази даних, які розміщені на віддаленому сервері, через безпечне з’єднання.
У відкритій команді SSH для налаштування локального перенаправлення портів ми використовуємо параметр -L. Наприклад:
1 |
ssh -i <keyfile> -o HostKeyAlgorithms=ssh-rsa -o StrictHostKeyChecking=no -L <localPort>:<remoteHost>:<remotePort> <user>@<remoteServerIP> -fN |
Де <keyfile>
– це шлях до файлу з приватним ключем, <localPort>
– це локальний порт, <remoteHost>
і <remotePort>
– це віддалений хост і порт відповідно, <user>
– це ім’я користувача на віддаленому сервері, а <remoteServerIP>
– IP-адреса віддаленого сервера.
Тепер давайте перейдемо до налаштування локального перенаправлення портів за допомогою бібліотеки sshtunnel у Python. Перш за все, ми повинні встановити цю бібліотеку за допомогою pip:
1 |
pip install sshtunnel |
Після встановлення ми можемо використати бібліотеку для створення SSH-тунелю. Нижче подано приклад коду, який налаштовує локальне перенаправлення портів:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import sshtunnel from sshtunnel import SSHTunnelForwarder # Інформація про SSH-сервер SSH_HOST = 'remoteServerIP' SSH_PORT = 22 SSH_USER = 'user' SSH_KEY = '/path/to/private/keyfile' # Інформація про перенаправлення портів LOCAL_PORT = localPort REMOTE_HOST = 'remoteHost' REMOTE_PORT = remotePort # Налаштування SSH тунелю with SSHTunnelForwarder( (SSH_HOST, SSH_PORT), ssh_username=SSH_USER, ssh_pkey=SSH_KEY, remote_bind_address=(REMOTE_HOST, REMOTE_PORT) ) as tunnel: print(f'Tunnel is open on localhost:{tunnel.local_bind_port}') tunnel.start() |
У цьому коді ми використовуємо бібліотеку sshtunnel для створення SSH-тунелю. Значення змінних SSH_HOST, SSH_PORT, SSH_USER, SSH_KEY, LOCAL_PORT, REMOTE_HOST і REMOTE_PORT повинні бути замінені відповідно до вашого SSH-сервера і налаштувань перенаправлення портів.
Необхідно вказати шлях до файлу з приватним ключем RSA у змінній SSH_KEY. Бібліотека sshtunnel автоматично розпізнає цей тип ключа.
Після запуску цього коду у вас буде створений локальний SSH-тунель, який перенаправлятиме трафік з вказаного локального порту на вказаний віддалений хост і порт.