通过 ssh 连接到 mysql

通过 ssh 连接到 mysql

所有涉及的计算机都是 Mac OS X 10.6.x 机器。

我在计算机 A 上,上面运行着 mysql,并且可以连接到它等等A~ $ mysql -u punkish -p database

我可以访问计算机 B,该计算机上也运行着 mysql。我可以通过端口 2200 使用 ssh 进入 B,并设置好 ssh 密钥对,进入后,我就可以像这样连接到数据库

A~ $ ssh -p 2200 punkish@B
B~ $ mysql -u punkish -p database

但是,我想在我的计算机上设置通过 ssh 的端口转发,这样我计算机 A 上端口 3307 上对 mysql 的所有请求实际上都会发送到 B 上的端口 3306。这将允许我使用想要连接到 mysql 的 GUI 程序(Quantum GIS),但无法通过隧道进行连接。因此,我执行以下操作

A~ $ ssh -p 2200 -L 3307:B:3306 punkish@B
B~ $

上面的命令让我直接登录到 B。我不确定隧道是否已建立,但我假设它已建立。但是,下面的命令失败了(在另一个终端中

A~ $ mysql -P 3307 -u punkish -p
Enter password:
ERROR 1045 (28000): Access denied for user 'punkish'@'localhost' (using password: YES)

有趣的是——我有另一个名为 Sequel Pro(适用于 Mac OS X 的桌面 MySQL 客户端)的 GUI 程序,它能够通过 ssh 顺利连接到 mysql@B。所以,我知道某物有效......我只是不知道怎么做。

回答我自己的问题(因为我无法在 8 小时内回答)

我想到了一个解决方案,但我不明白为什么。下面是——

我使用以下命令来建立隧道

user@compt_A ~$ssh -p 2200 -L 3307:compt_B:3306 ssh_user@compt_B cat -

我必须将上述内容更改为

user@compt_A ~$ssh -p 2200 -L 3307:127.0.0.1:3306 ssh_user@compt_B cat -

现在以下工作

user@compt_A ~$mysql -P 3307 -p -h 127.0.0.1 -u <db user@compt_B>

对我来说这没有意义的原因是因为第一个命令说“在端口 2200 上建立 SSH 隧道,将本地端口 3307 转发到计算机 B 上的端口 3306”,这比“在端口 2200 上建立 SSH 隧道,将本地端口 3307 转发到 127.0.0.1 上的端口 3306”更有意义

尽管如此,它还是有效。

哦,如果我使用第一个命令,那么 mysql 命令将失败并显示以下消息

ERROR 1130 (HY000): Host 'compt_A' is not allowed to connect to this MySQL server

答案1

使用 telnet 测试隧道是否打开。“telnet HOSTNAME PORTNUMBER”如果连接,则可以从您发起连接的机器访问该端口。

您可能还关心 ssh 客户端的“-g”选项:

-g 允许远程主机连接到本地转发端口。

我经常发现如果无法打开隧道,那么当我在远程机器上获取 shell 时,我会看到在第一次打印终端提示符之前报告一条消息,指出无法建立隧道。

答案2

也许你根本不需要 ssh 进入机器,你需要做的就是让 MySQL 知道来自你的网络的客户端可以访问该机器。看看授予创建用户陣容 註釋 .

http://dev.mysql.com/doc/refman/5.1/en/grant.html
http://dev.mysql.com/doc/refman/5.1/en/create-user.html

在我们的办公室,如果我在机器 A 上创建数据库,并且我希望网络 172.16.0.1/24 或 192.168.0.1/24 上的每个人都能够访问该机器(如果他们知道用户名“office_user”和密码“office_pass”)。我需要授权语句,以便让我使用办公室机器上的 mysql 客户端连接到我授予其访问权限的任何数据库。

这是在办公室创建用户的快速但不安全的方法,该用户可以通过任何网络对 MySQL 数据库执行任何操作。仅当您在非生产服务器上进行简单测试时才使用此方法。它使“office_user”用户几乎可以完全访问 MySQL 服务器上的所有数据库。

创建用户“office_user”@“172.16.0.%”,由“office_pass”识别;
创建用户“office_user”@“192.168.0.%”,标识为“office_pass”;授予所有权限至‘office_user’@‘172.16.0.%’,由‘office_pass’标识;
刷新权限;

请注意,由于我没有包含

创建用户'office_user'@'localhost',由'office_pass'识别;

不,您可以登录到托管在 IP 地址 172.16.0.20 的 mysql 服务器

mysql -u office_user -h 172.16.0.20 -p“office_pass”

更安全地,您可以仅授予自己对 GIS 软件所需的数据库“office_db”的访问权限。您的 IP 地址是 172.16.0.20。

创建用户“office_user”@“172.16.0.20”,标识为“office_pass”;授予 office_db 的所有权限。* 给“office_user”@“172.16.0.20”,标识为“office_pass”;
刷新权限;

您使用相同的登录名,但它只能访问指定的数据库

mysql -u office -h 172.16.0.20 -p“office_pass” office_db

您可以通过只授予自己所需的权限(如选择和删除)来使其更加安全。去阅读授权声明文件

相关内容