通过 SSH 连接 Firebird 数据库

Posted

技术标签:

【中文标题】通过 SSH 连接 Firebird 数据库【英文标题】:Connection Firebird DB via SSH 【发布时间】:2017-04-25 02:58:30 【问题描述】:

我正在使用 Laravel 和 Firebird 2.5 创建一个应用程序,并希望在 DigitalOcean 服务器结构上运行它。我们有两台服务器用于应用程序,一台用于 Web 服务(我们称之为 www),另一台用于数据库服务。我用 mysql 做了一个成功的设置,它运行良好,但我们都知道 Firebird 是一个粗糙的。所以这就是我们到目前为止所做的: 在 www 和 Firebird 2.5 SuperServer 中安装 LEMP 堆栈。正如我所说,这些是数字海洋服务器,都运行 Ubuntu 14.04。 我们在两台服务器之间创建了一个 SSH 隧道,结构如下:

ssh -L 9500:127.0.0.1:3050 username@db_server_ip_address (Private address)

但是当我们尝试将 www 上的应用程序与数据库服务器连接时,出现以下错误:

数据库不可用

在 Laravel 配置文件中使用了以下设置:

DB_HOST=127.0.0.1
DB_DATABASE=/home/username/database.gdb
DB_USERNAME=username
DB_PASSWORD=password

凭据正确,我们可以在远程(db)服务器上使用它。

您认为可能是什么问题?是 SSH 隧道吗?

【问题讨论】:

这听起来更像是系统管理员或 DBA 问题,而不是编程问题。 【参考方案1】:

警告:我很少使用 SSH,也从未使用过 SSH 隧道,我的回答是基于查看文档。

ssh -L 9500:127.0.0.1:3050 并没有像你认为的那样做:

指定到本地(客户端)主机上的给定 TCP 端口或 Unix 套接字的连接将被转发到远程端的给定主机和端口或 Unix 套接字。这通过分配一个套接字来监听本地端的 TCP 端口,可以选择绑定到指定的 bind_address 或 Unix 套接字。每当与本地端口或套接字建立连接时,都会通过安全通道转发连接,并与 host 端口 hostport 或 Unix 套接字建立连接remote_socket,来自远程机器。

(来自ssh(1))

换句话说,据我所知,正确的命令是:

ssh -L 9500:<ip-address of the Firebird server>:3050

第二个问题似乎是您的 Laravel 配置未指定端口,因此它可能仍在尝试连接到端口 3050(Firebird 默认端口),而不是您配置的端口 9500。我不知道 Laravel,但 DB_PORT=9500 的属性似乎是合乎逻辑的(但也许这些属性是特定于您自己的部署的,在这种情况下您可能需要做更多的工作)。

【讨论】:

感谢您的回答!我认为最好的方法是 Open***。 @Gabesz 我不确定我的回答的哪一部分会得出这个结论。

以上是关于通过 SSH 连接 Firebird 数据库的主要内容,如果未能解决你的问题,请参考以下文章

firebird数据库的问题么? FlameRobin 如何使用?

Firebird hash join

Firebird JDBC 驱动连接字符编码

谁做过sql数据库访问firebird数据库呀,怎么连接

Firebird isql 和 ODBC 连接的区别

Access如何释放ODBC