|  | 分類:[データベース全般]
 
 VB.NETでフォームアプリを作成し、外部Ubuntuサーバーに接続して
 サーバー上のMySQLに接続しています。
 
 (クライアント : OS/windows10
 サーバー: OS/ubuntu 20.04 LTS  MySQL 8.0)
 
 MySQLへの接続を以下のように公開鍵認証SSH接続を用いて試みると
 コネクションのオープン時拒否されます。
 エラーメッセージは35行目で
 "Unable to connect to any of the specified MySQL hosts"
 と示されています。
 
 (TCP/IPでのパスワード認証による接続を 公開鍵認証 SSH接続 に変更しようとしています。)
 
 公開鍵認証でサーバーへのログインまでは正常に実行できているようなのですが、
 解決方法・間違いなど御指摘頂けないでしょうか?
 
 尚、
 接続文字列中のMySQLユーザーは
 TCP/IPでの通信及びMySQL Workbenchを利用したクライアント側からの操作では
 正常に接続できています。
 またクライアント側で/etc/mysql/mysql.conf.d/mysqld/cnfのバインドアドレスを
 bind-address = 0.0.0.0
 と編集しています。
 
 SSH接続でのデータベース接続
 --------------------------------------------------
 01 Imports Renci.SshNet
 02 Imports MySql.Data.MySqlClient
 -------------------------------------------------
 03 Public Class Main_Form
 04  'SSH接続準備
 05  Private ssh_cninf As ConnectionInfo
 06  Private ssh_client As SshClient
 
 07  Private ssh_host As String = "サーバーのIPアドレス"
 08  Private ssh_user As String = "sshクライアントのユーザーID"
 09  Private ssh_key As PrivateKeyFile = New PrivateKeyFile("クライアント側の秘密鍵のパス", "秘密鍵のパスフレーズ")
 
 10 Sub New()
 
 11  InitializeComponent()
 
 12  'SSH接続
 13  try
 14    '設定
 15    Dim ssh_mthd As AuthenticationMethod = New PrivateKeyAuthenticationMethod(ssh_user, ssh_key)
 16    ssh_cninf = New ConnectionInfo(ssh_host, ssh_user, ssh_mthd)
 17    '接続
 18    ssh_client = New SshClient(ssh_cninf)
 19    ssh_client.Connect()
 20  Catch ex As Exception
 21    MessageBox.Show("SSH接続NG", "SSH接続", MessageBoxButtons.OK)
 22  End Try
 
 23  'DB接続
 24  '接続文字列
 25  Dim cnstr As String = "server=127.0.0.1;" &
 26             "port=3306;" &
 27             "database=db01;" &
 28             "userid=user01;" &
 29             "password=pass_for_user01"
 30  Try
 31    Dim sqlcn As New MySqlConnection(cnstr)
 32    sqlcn.Open()
 33    MessageBox.Show("db接続OK", "DB_ssh接続", MessageBoxButtons.OK)
 34  Catch ex As Exception
 35    MessageBox.Show("db接続NG " & ex.Message, "DB_ssh接続", MessageBoxButtons.OK)
 36  End Try
 --------------------------------------------------
 
 なお,以下のように接続方法(TCP/IP)ではMySQLとの接続が確立され、
 以降適切記述することでSQLを発行できています。
 
 TCP/IP通信でのデータベース接続 (コネクションの確立まで)
 --------------------------------------------------
 01 Imports MySql.Data.MySqlClient
 -------------------------------------------------
 02 Public Class Main_Form
 ・・・・・・・
 ・・・・・・・・
 03 Sub New()
 
 04  InitializeComponent()
 
 05  'DB接続
 06  '接続文字列
 07  Dim cnstr As String = "server=’サーバーのIPアドレス’;" &
 08             "port=3306;" &
 09             "database=db01;" &
 10             "userid=user01;" &
 11             "password=pass_for_user01"
 12  Try
 13    Dim sqlcn As New MySqlConnection(cnstr)
 14    sqlcn.Open()
 15    MessageBox.Show("db接続OK", "DB接続", MessageBoxButtons.OK)
 16  Catch ex As Exception
 17    MessageBox.Show("db接続NG " & ex.Message, "DB接続", MessageBoxButtons.OK)
 18  End Try
 
 以下DB操作
 --------------------------------------------------
 
 長文になりましたが、最後まで目を通していただきありがとうございます。
 宜しくお願い致します。
 
 
 
 |