首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过MySQL工作台的SSH隧道

通过MySQL工作台的SSH隧道
EN

Unix & Linux用户
提问于 2016-09-26 15:17:05
回答 2查看 9.1K关注 0票数 8

我的新生产服务器只能通过ssh双隧道显示。我可以通过Ubuntu的14.04控制台访问targetHost,只需执行命令ssh targetHost,而不是在远程机器上执行mysql,但我想通过gui访问MySQL db。如何在工作台中配置连接以实现连接?

我的. .ssh/config:

代码语言:javascript
复制
Host targetHost,  firewallHost
    User username
    IdentityFile /home/michalszulc/.ssh/id_rsa

Host targetHost
    proxycommand ssh -W %h:%p firewallHost

Host firewallHost
    hostname firewallHost.example.com
    port 2201
    passwordauthentication no
    controlmaster auto
    controlpath ~/

Host targetHost
    Hostname 123.123.123.123
EN

回答 2

Unix & Linux用户

发布于 2016-10-06 10:33:59

这个过程很简单。创建一个新连接并选择SSH上的连接方法Standard / IP。值

对于提供隧道的SSH服务器:

  • SSH主机名:生成SSH隧道的服务器的地址(SSH服务器和MySQL可以是相同的主机或相同的网络地址,这将取决于配置)。
  • SSH用户名: SSH服务器中的用户名。
  • SSH密码: SSH服务器中的用户密码(如果配置为模式密码身份验证)。
  • SSH密钥文件:如果您已在SSH服务器上启用了PasswordAuthentication策略,则包含用于在服务器上进行身份验证的私钥的文件具有值no)。

用于连接到DBMS MySQL。

  • MySQL主机名: MySQL运行服务的主机的地址,相对于SSH服务器。如果SSH和MySQL服务在同一主机上运行,则东界值为localhost或127.0.0.1,因为一旦建立了通过隧道的连接,MySQL服务将侦听来自localhost的请求(取决于指令bind_adress MySQL中设置的值)。
  • MySQL服务器端口:连接端口MySQL,通用为3306。
  • MySQL用户名:它将连接到MySQL的用户名(必须是MySQL的有效用户并获得隧道连接的授权)。
  • 默认架构:等效于SQL使用。
票数 4
EN

Unix & Linux用户

发布于 2016-10-07 10:59:56

如果我们让你的设置正确的话。因此,我假设firewallhost是可以从工作台访问的主机。因此,需要在此服务器上创建一个开放端口,该端口可以访问防火墙后面的“真正”mysql服务器。

如果您在firewallhost上设置了一个持久的ssh隧道,这是很好的。在firewallhost上这样做

ssh -L localhost:33060:localhost:3306 someshelluser@databasehost

这将为firewallhost上的端口33060 (或您在这里空闲的任何端口)上的localhost (在任何nic上不是公共的)创建一个开放隧道,作为回报,它通过这个隧道与3306个端口连接(同样是在本地主机上,但在机器databasehost上),因为它在databasehost上作为someshelluser连接。

现在您可以与工作台连接:

  • SSH主机名:firewallhost
  • SSH用户名:firewallhost上的一些有效用户
  • SSH密码:某些有效用户的密码
  • SSH密钥文件:替代密钥文件
  • MySQL Hostname:localhost (我们在firewallhost's本地主机上打开了一条隧道)
  • MySQL服务器端口: 33060
  • MySQL用户名:您的mysql用户

要使ssh隧道在firewallhost上持久,您可以像下面这样使用一个密钥文件(用于访问databasehost)和一个通过屏幕分离的进程来启动它。这可以放到您的rc.local或您在firewallhost上使用的任何东西中。

screen -d -m /usr/bin/ssh -v -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null" -o "BatchMode=yes" -i /your/.ssh/ssh_host_dsa_key -q -L locahost:33060:localhost:3306 someshelluser@databasehost

您必须“想象”这样一个ssh隧道可以“传输”从一台机器到另一台机器的任何端口流,方法是在您创建的机器上打开一个“新的”端口(这里是firewallhost)。这甚至可以在firewallhost的公共nic上完成,但是您希望它在本地主机上完成,因为您不想向公众公开您的mysql端口;)

更新:

好的,由于您没有直接访问firewallhost来创建持久隧道,所以尝试另一种方法。你说过你能连接到proxycommand。当您内联而不是以'-o‘选项编写它时,我假设您的ssh_config中包含了这个选项。

如果您的ssh_config如下所示:

代码语言:javascript
复制
Host server
    Hostname mysqlserver.example.org
    ProxyCommand ssh -W %h:%p firewallhost.example.org

然后,您可以在工作台中尝试以“SSH Hostname”的形式进行以下操作。偶然的情况下,你被允许给它的ssh参数。我没有测试它,但是对于应用程序来说,将Hostname字段的内容直接传递到ssh调用并不是多余的。

SSH主机名:

-o ProxyCommand="ssh -W %h:%p firewallhost.example.org" mysqlserver.example.org

这将通过防火墙主机将您带到mysqlserver上。从这里开始,您的mysql设置可以像工作台所期望的那样直接连接到mysqlserver。

UPDATE2:

正如您所写的,您所在的机器(Ubuntu 14)能够连接到firewallhost后面的mysql数据库,您应该只使用控制台上使用的工作台中的值。如果您使用. .ssh/config所针对的同一个用户调用工作台,工作台将使用您的. .ssh/config。

最后:

SSH主机名将是“targetHost”,其中.ssh/config中的proxy命令将您通过“targetHost”通过“firewallHost”引导到“targetHost”。SSH用户名是' Username‘(再次来自.ssh/config )。

MySQL主机名应该是localhost和端口3306 --正如您在问题中所写的那样,通过ssh访问'targetHost‘时应该这样做。因为工作台将在(!)之后使用这些值。它通过ssh连接。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/312452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档