我有一段代码,可让我通过Python中的ssh连接到我的psql DB。它可以在Ubuntu 18.10(通过VirtualBox)上完美运行,但每次在Windows上均会失败,并显示无法到达远程主机和端口的错误。
我正在开发一个用户界面,该用户界面可以查询远程数据库(日志等)中的数据并将其可视化。
所有开发工作均已在Ubuntu 18.10上使用Spyder3完成。在尝试在Windows 10上执行相同的代码之前,我从未遇到过任何问题。
我尝试了Telnet到localhost:port和远程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的成功连接以及随后成功登录到数据库。这可以通过同一台计算机上的VirtualBox在Ubuntu 18.10上运行。
实际结果: 2019-01-02 10:54:51,489错误设置SSH转发器时出现问题:无法打开隧道localhost:5432 <> localhost:5432可能正在使用中或目标无法访问
答案 0 :(得分:0)
我可能是错的,但是我认为remote_bind_address
应该设置为服务器的专用IP。因为这是远程计算机与您的计算机进行通信的地方。
remote_bind_address=(<PRIVATE_SERVER_IP>, PORT)
答案 1 :(得分:0)
我意识到我的本地postgres(psql)服务正在干扰端口映射,因为它也使用端口5432。一旦禁用该服务,它就会像魅力一样发挥作用。