Как настроить туннель s sh динамически в python? - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь построить туннель для подключения к БД Oracle, но туннель открыть нельзя. Ошибка следующая:

ОШИБКА | Проблема при настройке S SH Переадресация вверх: не удалось открыть туннельный локальный узел: 1521 <> XXXXXXXXX: 1521 может использоваться или назначение недоступно.

sshtunnel.HandlerSSHTunnelForwarderError: Произошла ошибка при открытии туннелей.

Мой код установлен так:

self.tunnel = sshtunnel.SSHTunnelForwarder((conn_data['gateway'], int(conn_data['gateway_port'])),
                                                   ssh_username=conn_data['username'],
                                                   ssh_password=password,
                                                   remote_bind_address=(conn_data['remote_bind'],
                                                                        int(conn_data['remote_port'])),
                                                   local_bind_address=(conn_data['local_bind'],
                                                                       int(conn_data['local_port'])))

Код работает нормально, если я нахожусь в сети компании, в которой я работаю. Но если я подключен через VPN, я получаю вышеуказанную ошибку. Я предполагаю, что VPN построен по тому же туннелю.

Я попытался изменить local_port и удалить локальную привязку, но если я это сделаю, я получу ошибку:

cx_ Oracle .DatabaseError: ORA-12541: TNS: нет прослушивателя

Итак, как я могу динамически настроить порт SSHTunnelForwarder, чтобы он мог обращаться к моей БД через мою уже установленную VPN?

Примечание: изменять конфигурацию VPN или не использовать ее нельзя.

1 Ответ

1 голос
/ 23 марта 2020

Проблема решена. Проблема заключалась в том, что мой VPN использовал тот же порт, что и я (что вызвало первую ошибку), и мое Oracle соединение также указывало на этот порт (что вызвало ошибку ORA-12541).

Для решения это, мне пришлось изменить conn_data ['local_port'] на другой порт и установить порт моего oracle подключения к этому же порту:

self.tunnel = sshtunnel.SSHTunnelForwarder((conn_data['gateway'], 
                                                    int(conn_data['gateway_port'])),
                                                   ssh_username=conn_data['username'],
                                                   ssh_password=password,
                                                   remote_bind_address=(conn_data['remote_bind'], int(conn_data['remote_port'])),
                                                   local_bind_address=(conn_data['local_bind'], 1234))

self.connection.connect(conn_data['host'],
                            port=1234,
                            username=conn_data['username'],
                            password=password,
                            look_for_keys=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...