PostgreSQL 通过 SSH 隧道
Posted
技术标签:
【中文标题】PostgreSQL 通过 SSH 隧道【英文标题】:PostgreSQL via SSH Tunnel 【发布时间】:2013-05-26 00:06:29 【问题描述】:我想使用 RazorSQL 连接到我在远程服务器上运行的数据库。我使用以下命令在本地主机上创建了一个 SSH 隧道:
ssh -L 1111:remote.server.com:5432 myuser@remote.server.com
我通过 RazorSQL 的 GUI 配置我的连接,指定 localhost
作为主机,1111
作为端口。当我点击“连接”时,出现以下错误信息:
ERROR: An error occurred while trying to make a connection to
the database:
JDBC URL: jdbc:postgresql://localhost:1111/myuser
FATAL:
no pg_hba.conf entry for host "aaa.bbb.ccc.ddd",
user "myuser", database "mydatabase", SSL off
aaa.bbb.ccc.ddd
是远程服务器的 IP 地址。
更重要的是,我不允许更改我的pg_hba.conf
文件的内容。这就是现在的样子:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
@remove-line-for-nolocal@# "local" is for Unix domain socket connections only
@remove-line-for-nolocal@local all all @authmethod@
# IPv4 local connections:
host all all 127.0.0.1/32 @authmethod@
# IPv6 local connections:
host all all ::1/128 @authmethod@
是否可以使用我当前的设置通过 SSH 隧道连接到数据库服务器,而无需修改服务器的配置?
【问题讨论】:
@authmethod@
应该是什么意思?
【参考方案1】:
您的 pg_hba.conf 似乎允许来自 localhost 的连接。使您的 SSH 隧道连接从 localhost 显示的最简单方法是使它们到 localhost。
以下 SSH 命令以用户“user”的身份连接到 remote.example.com,并使您的 ssh 客户端侦听 localhost 端口 1111/tcp。与该端口建立的任何连接都将通过 ssh 隧道转发,并且在 ssh 服务器端,连接将连接到 localhost 端口 5432/tcp。由于我们正在连接到 localhost,因此连接似乎也来自 localhost,并且应该与您现有的 pg_hba.conf 行匹配。
ssh -L 1111:localhost:5432 user@remote.example.com
如果预计这是一条长隧道,我建议使用autossh
要在运行 ssh 客户端的主机上使用 psql 客户端进行连接,请使用以下内容:
psql -h localhost -p 1111 -U your-db-username database-name
然后系统会提示您输入数据库用户的密码。
或者,您可以在运行 psql 的客户端的主目录中将以下行添加到名为 .pgpass
的文件中:
localhost:1111:database-name:your-db-user:your-db-password
【讨论】:
现在我收到一个错误:` FATAL: password authentication failed for user "myuser" ` 如果您收到FATAL: password authentication failed for user "myuser"
,请确认您的用户名和密码是远程 PostgreSQL 实例的有效凭据。我已经用一个如何使用 psql 客户端通过隧道连接的示例更新了答案。
不,这不是原因。我使用了 ssh、autossh,我更改了 psql 客户端,在 windows、linux 上进行了尝试……到处都出现上述错误。在接下来的几天里,我将与服务器的管理员联系。我希望他能找到解决我问题的可能原因/解决方案。
ALTER USER my-db-user WITH ENCRYPTED PASSWORD 'my-db-password'
绝对解决了这个问题。 @jeff,感谢您的回复!
@kozooh 是的!谢谢谢谢!!搞砸了这3天。如果我 ssh 进入机器,我可以使用密码登录到 psql 控制台。但是,如果我尝试通过 ssh 隧道连接,它总是会给我一个“密码验证失败...”错误。使用加密密码拯救了这一天!以上是关于PostgreSQL 通过 SSH 隧道的主要内容,如果未能解决你的问题,请参考以下文章
使用 SSH 隧道的 PostgreSQL/psycopg2 密码验证
使用 Python 通过 SSH 隧道连接到远程 PostgreSQL 数据库
通过 SSH 隧道在 PostgreSQL 上进行身份验证失败
致命:主机“::1”没有 pg_hba.conf 条目试图通过 ssh 隧道连接到 postgresql 服务器
Metabase 和 Postgresql 之间的 SSH 隧道失败
使用带有公钥和密码的 SSH 隧道通过 SQLAlchemy 连接到远程 PostgreSQL 数据库,所有这些都来自 Windows 机器