Ошибка подключения к БД через ssh с Python в Windows - PullRequest
0 голосов
/ 02 января 2019

У меня есть фрагмент кода, который позволяет мне подключаться к моей базе данных psql через ssh в Python. Он отлично работает в Ubuntu 18.10 (через VirtualBox), но каждый раз дает сбой в Windows с ошибкой, что он не может достичь удаленного хоста и порта.

Я занимаюсь разработкой пользовательского интерфейса, который может запрашивать данные из удаленной БД (журналы и т. Д.) И визуализировать их.

Вся разработка была сделана с использованием Spyder3 в Ubuntu 18.10. У меня никогда не было проблем, пока я не попытался выполнить тот же код в Windows 10.

Я попытался использовать Telnet как для localhost: port, так и для remote host: port (через ssh), и это работает. Посмотрев все возможные ответы на stackoverflow и другие места, я все еще не смог решить проблему. Тот факт, что он работает в одной среде, а не в другой, в то время как на одной и той же машине, говорит мне, что это какая-то настройка среды, но я не знаю, что это может быть.

Код:

import psycopg2
import logging
logging.basicConfig(level=logging.DEBUG)

from sshtunnel import SSHTunnelForwarder

PORT = 5432
REMOTE_HOST = '111.222.111.222'
REMOTE_SSH_PORT = 22
curs = None
conn = None


server = SSHTunnelForwarder((REMOTE_HOST, REMOTE_SSH_PORT),
     ssh_username='username',
     ssh_password='password',
     remote_bind_address=('localhost', PORT),
     local_bind_address=('localhost', PORT))

server.start()
conn = psycopg2.connect(database='db_name', user='db_username', password='db_password', host='127.0.0.1', port='5432')
curs = conn.cursor()

Ожидаемое: Успешное подключение к ssh и последующий успешный вход в базу данных. Это работает в Ubuntu 18.10 через VirtualBox на той же машине.

Фактический результат: 2019-01-02 10: 54: 51,489 ОШИБКА Неполадка при настройке SSH Forwarder up: не удалось открыть туннель localhost: 5432 <> localhost: 5432 может использоваться или пункт назначения недоступен

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Я понял, что мой локальный сервис postgres (psql) мешает отображению портов, так как он также использует порт 5432. Как только я отключил сервис, он работал как чудо.

0 голосов
/ 02 января 2019

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

 remote_bind_address=(<PRIVATE_SERVER_IP>, PORT)
...