在 Windows 上使用 Python 通过 ssh 连接到数据库时出错

Error connecting to DB via ssh with Python on Windows

我有一段代码可以让我在 Python 中通过 ssh 连接到我的 psql 数据库。它在 Ubuntu 18.10(通过 VirtualBox)上完美运行,但每次在 windows 上都失败,并出现无法到达远程主机和端口的错误。

我一直在开发一个用户界面,可以从远程数据库(日志等)查询数据并将其可视化。

所有开发都是在 Ubuntu 18.10 上使用 Spyder3 完成的。在我尝试在 Windows 10 上执行相同的代码之前,我从来没有遇到过问题。

我尝试通过 Telnet 连接到 localhost:port 和远程 host:port(通过 ssh)并且它有效。在 Whosebug 和其他地方查找了所有可能的答案后,我仍然无法解决问题。它适用于一个环境而不适用于另一个环境,同时在同一台机器上,这一事实告诉我这是某种环境设置,但我不知道它可能是什么。

代码:

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 并随后成功登录到数据库。这在同一台机器上通过 VirtualBox 适用于 Ubuntu 18.10。

实际结果: 2019-01-02 10:54:51,489 错误设置 SSH 转发器时出现问题:无法打开隧道 localhost:5432 <> localhost:5432 可能正在使用或目标无法访问

我可能错了,但我认为 remote_bind_address 应该设置为您服务器的私有 IP。因为这是远程机器与您的机器通信的地方。

 remote_bind_address=(<PRIVATE_SERVER_IP>, PORT)

我意识到我的本地 postgres (psql) 服务正在干扰端口映射,因为它也在使用端口 5432。一旦我禁用了该服务,它就像一个魅力。