通过 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 数据库的主要内容,如果未能解决你的问题,请参考以下文章