【问题标题】:Connect to mysql / oracle database with ssh使用 ssh 连接到 mysql/oracle 数据库
【发布时间】:2015-10-12 15:29:54
【问题描述】:

我想在 ssh 中使用工具 SquirreL 连接到我的数据库。 是否可以? 遗憾的是,我没有其他选项可用于此服务器,所以如果它不起作用,我将不得不更换工具。

【问题讨论】:

  • 图形 SQL 客户端,如 SquirreL(以及 HeidiSQL 和 MySQL Workbench)直接连接到 SQL 服务器,无需中间连接。为什么这个标准方法不起作用?机器不能远程访问吗?服务器运行的端口是在您这边还是在服务器那边被阻塞?
  • 这台机器只能通过 ssh 连接访问,遗憾的是,它在服务器端被阻止。或者我仍然可以使用 phpmyadmin...(原文如此)
  • 如果安装了 phpmyadmin,这可能是与服务器交互的最佳方式,因为它具有 sql 转储、查询执行、表结构和数据浏览以及所有常见的东西。如果没有,您可能可以安装它,因为您有 SSH 访问权限。
  • 像phpMyAdmin 这样的应用程序是一个潜在的攻击媒介。对于开发服务器来说很好,但是任何使用ssh 的人实际上可能有一个远程服务器,它不应该有任何额外的孔。

标签: squirrel-sql


【解决方案1】:

没有办法直接通过 Squirrel 进行,但是设置 Squirrel 可以使用的 ssh 隧道非常简单(当您知道如何操作时)。

我忘记了如何,来到这里寻找一些东西来刷新我的记忆......但我在 StackOverflow 上没有运气,所以我做了研究,我将解决方案留给未来的我......希望它也能对其他人有所帮助。

  1. 创建 ssh 隧道:

    $ ssh -v -N -L3307:localhost:3306 remotehostname

    我选择使用 3307 端口,因为我也有 MySQL 在 3306 端口上本地运行。

    详情(或者您可以直接跳到第 2 步):

    3307 是您希望在本地使用的端口来引用远程系统。

    我认为这里的localhost是指远程系统,从它自己的角度来看,所以localhost:3306指的是远程系统上的标准MySQL端口。

    -v 是可选的;它只是使 ssh 的输出更详细,这有助于故障排除。您不会将运行ssh 的窗口用于其他任何事情,所以不妨让它变得闲聊。

    -N 表示您对在远程主机上实际打开 shell 不感兴趣。我们在这里仅用于数据库连接。

    如果您打开了详细选项,您应该会看到如下消息:

    debug1: Local connections to LOCALHOST:3307 forwarded to remote address localhost:3306

    如果您没有打开详细输出,您只会看到类似Authenticated to 10.0.1.234 (via proxy).

  2. 在 Squirrel 中设置一个“别名”,如下所示:

    点击Test,然后点击Connect来测试你的连接。

    如果您使用-v 选项运行ssh,您可以在尝试通过Squirrel 连接时观察窗口。如果连接成功,您应该会看到如下内容:

    debug1: Connection to port 3307 forwarding to localhost port 3306 requested. debug1: channel 2: new [direct-tcpip] debug1: channel 2: free: direct-tcpip: listening port 3307 for localhost port 3306, connect from 127.0.0.1 port 54536 to 127.0.0.1 port 3307, nchannels 3

  3. 完成数据库后,只需在 ssh 窗口中按 CtrlC 即可终止隧道(如果您离开了 -N选项,我猜你必须按 CtrlD 来关闭 shell)。

【讨论】:

  • 顺便说一下,一旦你完成了这个设置,JDBC 连接字符串可能可以用于任何 JDBC 客户端,包括 IntelliJ IDEA(它有自己的 ssh 隧道支持,但它不会与跳转主机合作)。
【解决方案2】:

遗憾的是 squirrelSQL 不支持 ssh 隧道。幸运的是,MySQL Workbench 确实支持 ssh 隧道,因此如果您要连接到 MySQL 数据库,我建议您使用它。

使用其他工具的替代方法是使用 ssh 端口转发。本质上,您可以将端口 3306(或 MySQL DB 使用的任何端口)从远程机器转发到本地机器。网上有很多关于如何做到这一点的指南。建立带有端口转发的隧道后,您可以使用本地连接字符串,例如“localhost:3306”。连接到远程数据库。将 ssh 连接字符串放在 .sh 或 .bat 文件中是个好主意,因为当您需要第一次连接到数据库时,您必须运行。

【讨论】:

  • 是的,这就是我所做的,但与其他一些工具相比,它仍然很挑剔,而且不是真正的用户友好/有效
猜你喜欢
  • 2016-10-25
  • 1970-01-01
  • 2014-10-19
  • 2021-12-15
  • 2016-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多