我正在尝试远程连接到服务器,然后用python访问它的本地数据库。我已成功连接到服务器,但似乎无法连接到服务器上的数据库。我的代码如下:
import psycopg2
from sshtunnel import SSHTunnelForwarder
try:
with SSHTunnelForwarder(
('<server ip address>', 22),
ssh_private_key="</path/to/private/ssh/key>",
ssh_username="<server username>",
remote_bind_address=('localhost', 5432)) as server:
print "server connected"
conn = psycopg2.connect(database="<dbname>",port=server.local_bind_port)
curs = conn.cursor()
print "database connected
except:
print "Connection Failed"
这是我在互联网上找到的一些示例代码。我也尝试了下面的连接语句来代替上面的连接语句:
params = {
'database': '<dbname>',
'user': '<dbusername>',
'password': '<dbuserpass>',
'host': 'localhost',
'port': 5432
}
conn = psycopg2.connect(**params)
我知道我可以连接到数据库,因为在我的机器上;我可以使用sqlectron
进行隧道连接并进行适当的连接。
如果不清楚我要从上面做什么,我需要使用计算机上的一个专用ssh密钥(正常工作)通过ssh隧道连接到远程服务器,然后连接到端口5432
上的PostgreSQL数据库。
我当前收到两种连接方式的当前错误消息:
2016-01-23 11:16:10,978 | ERROR | Tunnel: 0.0.0.0:49386 <> localhost:5432 error: (9, 'Bad file descriptor')
我不知道这是否有用,但我也必须通过SSH隧道连接到Postgresql数据库。我成功地使用您的代码进行了一些修改:
在添加
server.start()
之后,代码工作得很好。此外,“数据库已连接”后缺少倒逗号。 我希望这对你有帮助,谢谢分享你的代码!这个解决方案解决了Windows 10上Python3的问题。
我不得不补充:
这两个例子都很有帮助。我在数据库连接中手动绑定本地端口时遇到问题。我想我们的服务器上有一个动态端口?我结合了这两个例子的元素。使用sever.local_bind_port可能是一种更健壮和动态的解决方案。
相关问题 更多 >
编程相关推荐