我的新生产服务器只能通过ssh双隧道显示。我可以通过Ubuntu的14.04控制台访问targetHost,只需执行命令ssh targetHost,而不是在远程机器上执行mysql,但我想通过gui访问MySQL db。如何在工作台中配置连接以实现连接?
我的. .ssh/config:
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发布于 2016-10-06 10:33:59
这个过程很简单。创建一个新连接并选择SSH上的连接方法Standard / IP。值
对于提供隧道的SSH服务器:
PasswordAuthentication策略,则包含用于在服务器上进行身份验证的私钥的文件具有值no)。值
用于连接到DBMS MySQL。
bind_adress MySQL中设置的值)。发布于 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连接。
现在您可以与工作台连接:
firewallhostfirewallhost上的一些有效用户localhost (我们在firewallhost's本地主机上打开了一条隧道)要使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如下所示:
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。
正如您所写的,您所在的机器(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连接。
https://unix.stackexchange.com/questions/312452
复制相似问题