作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试远程连接到服务器,然后使用 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
进行隧道连接并进行适当的连接。
以防万一不清楚我在上面尝试做什么,我需要在我的计算机上使用私有(private) ssh key 通过 ssh 隧道连接到我的远程服务器(正常工作),然后我需要连接到 PostgreSQL位于 localhost
端口 5432
上的数据库。
我目前收到两种尝试连接方式的当前错误消息:
2016-01-23 11:16:10,978 | ERROR | Tunnel: 0.0.0.0:49386 <> localhost:5432 error: (9, 'Bad file descriptor')
最佳答案
我不知道这是否有帮助,但我也必须通过 SSH 隧道连接到 PostgreSQL 数据库。我使用您的代码进行了一些修改后成功连接:
import psycopg2
from sshtunnel import SSHTunnelForwarder
try:
with SSHTunnelForwarder(
('<server ip address>', 22),
#ssh_private_key="</path/to/private/ssh/key>",
### in my case, I used a password instead of a private key
ssh_username="<server username>",
ssh_password="<mypasswd>",
remote_bind_address=('localhost', 5432)) as server:
server.start()
print "server connected"
params = {
'database': '<dbname>',
'user': '<dbusername>',
'password': '<dbuserpass>',
'host': 'localhost',
'port': server.local_bind_port
}
conn = psycopg2.connect(**params)
curs = conn.cursor()
print "database connected"
except:
print "Connection Failed"
添加 server.start()
后,代码运行良好。此外,在“数据库连接”之后缺少引号。我希望这可能对您有所帮助,感谢您分享您的代码!
关于python - 在 Python 中通过 SSH 隧道连接到 PostgreSQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34965824/
我正在开发一个 voip 调用应用程序。我需要做的是在接到来电时将 Activity 带到前台。我在应用程序中使用 Twilio,并在收到推送消息时开始调用。 问题是我试图在接到任何电话时显示 Act
我是一名优秀的程序员,十分优秀!