无法在 Ubuntu 上建立 Postgres pgAdmin SSH 隧道

Posted

技术标签:

【中文标题】无法在 Ubuntu 上建立 Postgres pgAdmin SSH 隧道【英文标题】:Can't establish Postgres pgAdmin SSH tunnel on Ubuntu 【发布时间】:2016-09-01 21:44:48 【问题描述】:

我在带有 Ubuntu 14.04 和 PostgreSQL 9.3 的 DigitalCloud 上有一个 droplet。在本地机器上我有相同的配置。

我的 ssh 连接正常,所以没有问题。它必须在我的 Postgres 连接或环境设置中的某个位置。

所以我已经在服务器上做的是:

更改了/etc/ssh/sshd_config中的监听端口

4321 端口

/etc/postgresql/9.3/main/pg_hba.conf 中启用远程连接

host all all 0.0.0.0/0 md5

/etc/postgresql/9.3/main/postgresql.conf中添加监听地址

listen_addresses = '*'

这是我的本地连接设置:

Here is my Properties tab screen

Here is my SSH Tunnel tab screen

我使用之前用于建立 ssh 连接的相同(且唯一)id_rsa.pub 文件。哪个正在工作。这是我在尝试连接时遇到的错误:

SSH 错误:通过识别文件进行身份验证失败,错误代码为 -16 [无法从私钥文件中提取公钥:密码错误 或无效/无法识别的私钥文件格式]

我的密码设置为空。

如果我尝试在不使用 SSH 隧道的情况下进行连接,则会出现另一个错误:

连接到服务器时出错:SSL 错误:需要未知协议 来自服务器的认证请求,但收到了 S

我完全是新手,我可能错过了一些重要的事情。因此,如果您希望我提供有关此问题的任何其他信息,请告诉我。

编辑 1:

如果我使用正确的 id_rsa 文件(没有 pub),那么我会得到同样的错误:

连接到服务器时出错:SSL 错误:需要未知协议 来自服务器的认证请求,但收到了 S

【问题讨论】:

【参考方案1】:

我使用相同(且唯一)的 id_rsa.pub 文件

第一个问题是这是错误的文件。查看您是否在同一位置有一个名为“id_rsa”的文件,但没有“.pub”扩展名。那是您应该用作身份文件的文件。

RSA ssh 密钥有两个文件:“id_rsa”包含私钥,而“id_rsa.pub”包含公钥。 id_rsa.pub 安装在您要连接的服务器上,而 id_rsa 由与服务器建立连接的客户端使用。

(当然,密钥文件可以命名为“id_rsa”以外的名称。关键是私钥在foobar中,而公钥在foobar.pub.)

如果您没有 id_rsa 文件,那么您应该生成一个新密钥并保留这两个文件。

第二个问题是您在 Properties 选项卡上设置了错误的端口。属性选项卡上的端口号是 PG 服务器运行的端口。您应该将其设置为 5432 或服务器实际侦听的任何端口。看来你也应该将属性选项卡上的“主机”设置为“本地主机”,但我不知道这是否需要。

连接服务器时出错:SSL 错误:来自服务器的未知协议预期身份验证请求,但收到了 S

现在发生的情况是,您的隧道 PG 连接将转到远程主机上的端口 4321,即 SSH 服务器。碰巧SSH服务器发送给新客户端的第一件事是一个版本字符串,它看起来像“SSH-2.0-OpenSSH_6.9”我不知道PG协议,但显然你的客户端读取了“S” SSH 字符串并立即知道它没有连接到 PG 服务器。

【讨论】:

是的,我也试过这个,但它给了我同样的错误:连接到服务器时出错:SSL 错误:来自服务器的未知协议预期身份验证请求,但收到了 S 也许这会有所帮助:如果我将用户名更改为一些不存在的名称,它会给我这个错误 SSH 错误:身份文件身份验证失败,错误代码 -18 [用户名/公钥组合无效] 刚刚发现我本地的 Postgres 和服务器的版本不同(9.5 和 9.3),并认为这可能会导致问题。所以我将服务器版本升级到相同的9.5.2,重新启动它,但问题仍然存在:( @SeyboGlaux 添加了关于端口号的部分。我会注意我自己不使用 postgressql 或 pgadmin。如果您在此之后仍然遇到问题,我可能帮不上什么忙。

以上是关于无法在 Ubuntu 上建立 Postgres pgAdmin SSH 隧道的主要内容,如果未能解决你的问题,请参考以下文章

无法创建用户 postgres:角色“postgres”不存在

无法在heroku上恢复postgres转储

无法使用 docker 连接到 ipv6 中的 postgres

无法在 MACOS mojave 上运行来自 python 2.7 的 postgres 请求

ubuntu上安装postgres以及在远程连接上的坑

尝试通过 JDBC 与 Postgres 建立 SSL 连接时出现 PSQLException“无法打开 SSL 根证书文件”