我尝试使用python通过隧道连接到我的数据库,但系统崩溃并显示警告:
"10.9.8.5", port 5433 failed: Connection timed out (0x0000274C/10060)
Is the server running on that host and accepting TCP/IP connections?
我的python设置:
`
with SSHTunnelForwarder(
('10.132.230.2', 22),
ssh_username="<usrnm>",
ssh_password="<psswrd>",
remote_bind_address=('10.9.8.5', 5433)) as server:
server.start()
print ("server connected")
params = {
'database': "<dbnm>",
'user': "postgres",
'password': "<dbpsswrd>",
'host': '10.9.8.5',
'port': 5433
}
conn = psycopg2.connect(**params)
curs = conn.cursor()
Everything below happened in 10.9.8.5 I tried to edit postgres configs:
1.我已经更改了postgresql.conf
1.我已经更改了pg_hba. conf(我添加了最后一行)
1.我重新启动postgres
但这并没有帮助
好的,在搜索了更多之后,我偶然发现了这样一个事实,那就是我允许端口5433
的防火墙可能有问题
然后我重新启动了服务器,但仍然收到此消息
1条答案
按热度按时间lb3vh1jj1#
您要告诉数据库客户端直接连接到10.9.8.5:5433,这不是隧道的工作方式。
SSHTunnelForwarder
在您的 * 本地 * 机器上打开一个端口,然后通过中间ssh服务器将该端口转发给给定的remote_bind_address
。它不允许您在原始IP地址下神奇地访问远程服务器。因此,在连接到数据库服务器时,您需要使用localhost
或127.0.0.1
,并使用正确的端口号。默认情况下,
SSHTunnelForwarder
选择本地主机上的一个随机可用端口;所选的端口号随后通过local_bind_port
属性显示。但是,默认情况下,它也向其他主机打开此端口(0.0.0.0)。这不是必需的,因此最好是显式的,并且只绑定到localhost a.k.a.127.0.0.1
;您可以使用local_bind_address
参数来完成此操作。把所有这些放在一起: