怎么通过SSH连接Mysql数据库
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么通过SSH连接Mysql数据库相关的知识,希望对你有一定的参考价值。
参考技术A 在这里小编使用的是SQLyogEnt进行远程连接配置了SSH的数据库。通过桌面的SQLyogEnt运行数据库客户端。在界面中点击【新建】按钮,在mysql下填写Mysql数据库的ip地址、用户名、密码、端口(默认在3306)就好,数据库名称。这里跟普通的连接数据库的方法一致。
这个时候读者可以点击一下【测试连接】,这个时候点击测试连接去连接数据库是不会成功的,因为数据库配置了SSH访问。如下图:
配置完成Mysql信息后,在旁边选择【SSH】
点击SSH后会弹出一个提示框,点击提示框的【确定】按钮。
点击后勾选“使用SSH隧道”
勾选后下方的配置信息由勾选前的灰色变更为白色可输入状态,在这里配置访问的SSH主机地址、用户名、密码或者公共密匙。
配置完成后来测试配置连接是否正确,点击【测试连接】由于已经配置了正确的SSH访问,这次测试连接成功了。
9
最后就可以点击界面下方的【连接】按钮,连接上数据库,进行操作了。
通过 SSH 隧道的 mySQL 连接字符串,无需密码
【中文标题】通过 SSH 隧道的 mySQL 连接字符串,无需密码【英文标题】:mySQL connection string through SSH tunnel without password 【发布时间】:2013-09-01 04:17:58 【问题描述】:我已获得对运行 mySQL 的服务器的 SSH 访问权限。我的访问权限通过我的公钥进行验证,无需其他密码。
使用 Putty,我可以使用我的私钥通过 SSH 连接到服务器,通过命令行工具直接登录到 mySQL 数据库并直接运行 SQL。我希望通过 C# 服务来模拟这一点(通过 SSH 连接转发端口 3306),不幸的是,http://www.connectionstrings.com/mysql/ 中列出的所有连接字符串都需要密码。
到目前为止,我使用 MySql.Data
和 SSH.NET
的粗略代码:
PrivateKeyFile file = new PrivateKeyFile(@" [ path to private key ]");
using (var client = new SshClient(" [ server ] ", "ubuntu", file))
var port = new ForwardedPortLocal(3306, "localhost", 3306);
client.AddForwardedPort (port);
client.Connect();
var connection = new MySqlConnection(
"server=localhost;database=[database];uid=ubuntu;"
);
MySqlCommand command = connection.CreateCommand();
MySqlDataReader Reader;
command.CommandText = "select * from sample";
connection.Open();
Reader = command.ExecuteReader();
while (Reader.Read())
string thisrow = "";
for (int i = 0; i < Reader.FieldCount; i++)
thisrow += Reader.GetValue(i).ToString() + ",";
Console.Write(thisrow);
connection.Close();
client.Disconnect();
在没有SshClient
部分的情况下运行代码,与本地网络上的数据库(使用已知的用户名和密码)通信,运行良好。加入SshClient
部分,并在设置隧道后设置断点后,我可以远程登录到localhost:3306
并从mySQL 获得响应。
但是,connection.Open()
行会抛出以下错误:
使用方法“mysql_native_password”对用户“ubuntu”的主机“localhost”进行身份验证失败,并显示消息:用户“ubuntu”@“localhost”的访问被拒绝(使用密码:YES)
那么...我需要什么连接字符串?还是我错过了其他地方的一些微妙之处?
【问题讨论】:
【参考方案1】:如果从错误的主机连接,MySQL 可以拒绝登录。也许你不允许 ubuntu 从 localhost 连接?
https://dev.mysql.com/doc/refman/5.1/en/connection-access.html
【讨论】:
使用 SSH 隧道,连接似乎来自哪个服务器 - 服务器上的 sshd 不会使它们看起来来自本地主机吗? 我不确定,但看看错误,我假设确实如此。您可以在使用相同凭据运行 mysql 的机器上使用命令行登录 mysql 吗? : mysql --host=localhost --user=ubuntu 那么它可能是别的东西。由于错误,这对我来说似乎是最合乎逻辑的。目前我想不出另一种解决方案。对不起。 没问题,感谢收看。我现在看到 ssh 隧道本身是否可能是问题所在。【参考方案2】:问题原来与 SSH 隧道本身有关;使用 Putty 创建隧道并删除该行之前运行的所有代码:
var connection = new MySqlConnection(
"server=localhost;database=[database];uid=ubuntu;"
);
现在成功了。
吸取的两个教训:
如果 mySQL 不需要密码,则可以省略密码。 mySQL 的错误消息可以更加明确。【讨论】:
以上是关于怎么通过SSH连接Mysql数据库的主要内容,如果未能解决你的问题,请参考以下文章
Windows平台使用Navicat for MySQL通过SSH密钥认证连接远程MySQL数据库
在 Netbeans 中通过 SSH 连接到 MySql db