SSHTunnel用于远程访问postgres服务器

时间:2017-03-03 17:17:22

标签: python sql ssh

我刚开始使用postgres和ssh,并且在理解我需要做什么才能让远程客户端访问postgres服务器时遇到了一些麻烦。现在我有一台运行服务器的计算机,我可以使用psycopg2访问,但现在我想使用另一台计算机查询服务器。我环顾四周,发现使用sshtunneler的例子,但我觉得我错过了一些拼图。

import psycopg2
from sshtunnel import SSHTunnelForwarder
import time

with SSHTunnelForwarder(
         ('192.168.1.121', 22),
         ssh_password="????",
         ssh_username="????",
         remote_bind_address=('127.0.0.1', 5432)) as server:

    conn = psycopg2.connect(database="networkdb",port=server.local_bind_port)
    curs = conn.cursor()
    sql = "select * from Cars"
    curs.execute(sql)
    rows = curs.fetchall()
    print(rows)

我的第一个困惑是我不确定应该使用什么用户名/密码。我下载了putty并使用这个tutorial将远程地址信息放在隧道部分中,但我不知道是否正在做任何事情。当我尝试启动服务器时出现错误

2017-03-03 10:03:28,742| ERROR   | Could not connect to gateway 192.168.1.121:22 : 10060

对我需要做的任何形式的帮助/解释都将不胜感激。

如果我能在没有ssh的情况下做到那么那会更好。目前正在运行:

psycopg2.connect(dbname='networkinfodb',  user='postgres', host='168.192.1.121', password='postgres', port=5432)

...输出

OperationalError Traceback(最近一次调用最后一次)  in() ----> 1 psycopg2.connect(dbname ='networkinfodb',user ='postgres',host ='168.192.1.121',password ='postgres',port = 5432)

OperationalError: could not connect to server: Connection timed out (0x0000274C/10060)
    Is the server running on host "168.192.1.121" and accepting
    TCP/IP connections on port 5432?

我不知道该去哪里弄清问题是什么。

1 个答案:

答案 0 :(得分:0)

所以我没有使用ssh隧道。这只是一个备份,因为我无法使用psycopg2连接到数据库。我发现防火墙阻止端口被外部访问,所以我能够改变它,现在我可以从客户端访问数据库了。