我有一段代码,允许我通过 Python 中的 ssh 连接到我的 psql 数据库。它在 Ubuntu 18.10(通过 VirtualBox)上完美运行,但每次在 Windows 上都会失败,并出现无法到达远程主机和端口的错误。
我正在开发一个用户界面,可以从远程数据库(日志等)查询数据并将其可视化。
所有开发都是在 Ubuntu 18.10 上使用 Spyder3 完成的。在我尝试在 Windows 10 上执行相同的代码之前,我从未遇到过问题。
我尝试 Telnet 到 localhost:port 和远程主机: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,随后成功登录数据库。这可以通过同一台计算机上的 VirtualBox 在 Ubuntu 18.10 上运行。
实际结果: 2019-01-02 10:54:51,489 错误设置 SSH 转发器时出现问题:无法打开隧道 localhost:5432 <> localhost:5432 可能正在使用或目标无法访问
最佳答案
我意识到我的本地 postgres (psql) 服务正在干扰端口映射,因为它也使用端口 5432。一旦我禁用该服务,它就会像魅力一样工作。
关于python - 在 Windows 上使用 Python 通过 ssh 连接到数据库时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54004429/