嗨,我正在开发一个测试应用程序,以了解如何使用SSH隧道连接到C++中的MySQL数据库。在C++中使用SSH隧道到MySQL
我使用的是libssh2库,我使用的示例来自https://www.libssh2.org/examples/direct_tcpip.html,但我并不是100%确定这是否是正确的使用方法。
我已经差不多复制的例子,但连接到MySQL在我的插座MySQL时抛出
Errro 2013 (HY000): Lost connection to mysql server at 'reading communication packet', system error: 0
当我连接使用到mysql的mysql -uroot -p -P2222我的应用程序使用的通道上读取数据以下内容:
int len = libssh2_channel_read(channel, buf, sizeof(len));
和buf将包含SSH-2.0-
,然后这是如下写入转发插座:
wr = 0;
while (wr < len)
{
i = send(forward_socket, buf + wr, len - wr, 0);
if (i <= 0)
{
perror("write");
return EXIT_FAILURE;
}
wr += i;
}
只要发送完成,我立即得到mysql错误。我认为这是因为我发送SSH-2.0-到MySQL,MySQL不期望如此关闭连接,但我看不到有什么问题,我无法确定libssh2 direct_tcpip是否正确要使用的东西。
感谢您提供的任何帮助。
还有一个类似的线程在这里http://stackoverflow.com/questions/21091850/error-2013-hy000-lost-connection-to-mysql-server-at-reading-authorization-pa – Misgevolution
这并没有真正相关,是的,它是同样的错误,但这是关于MySQL配置/网络而不是C++编程创建一个SSH隧道,这是我正在尝试做的 – Boardy
等待你从一开始就试图做什么。 SSH隧道是一种套接字事情EG,当客户机上的客户端设备EG MySQL Workbench连接到'localhost:8282'时,您就可以将客户端端口'8282'隧道连接到服务器'3306',然后设置您的MySQL客户端然后可以使用'localhost:8282'它会连接到你的服务器的端口'3306' –