嗨,我正在開發一個測試應用程序,以瞭解如何使用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' –