C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[9]: Ubuntuサーバー上のMySQLに接続できません。


(過去ログ 178 を表示中)

[トピック内 12 記事 (1 - 12 表示)]  << 0 >>

■101985 / inTopicNo.1)  Ubuntuサーバー上のMySQLに接続できません。
  
□投稿者/ kitakitune (16回)-(2023/05/24(Wed) 12:41:17)

分類:[.NET 全般] 

実現したいこと
以下の条件で、
クライアント(VB.NETフォームアプリ)から
サーバー(os:ubuntu 22.04.02 LTS)のデータベース(MySQL 8.0.33)に接続する。

条件
1.クライアントとサーバー間はSSHで接続する。
2.MySQLの設定で、bind-addressは‘127.0.0.1’とする。
3.MySQLにログインするユーザーは 'xxx'@'localhost'とする。

以下の手順で実装できると考えい自分なりにコーディングしましたが、
 (サーバーにSSH接続する-ポートを転送する-MySQLにログインする)
思うように動作しません。(bind-addressが‘127.0.0.1’ではログインできません。)

状況は次の通りです。

1.MySQLの設定を、bind-addressは‘0.0.0.0’
  MySQLのユーザー 'bbb'@'%' ではMySQLにログイン出来てクエリを発行できます。

2.MySQLの設定を、bind-addressを‘127.0.0.1’に変更すると上記ユーザーでログインできなくなります。
   以下のコード35  mysql_conn.Open() の所で例外が投げられます。
   エラーメッセージは次の通りです。
     MySqlException:Reading from the strem has failed.
       EndOfStreamException: ストリームの末尾を越えて読み取ろうとしました。
  (上記条件2.の所でつまづいているので3.はまだ検証できていません。)

設定等どこかに間違いがあるのか、
あるいはそもそも、方法が間違っているのか御指摘頂けないでしょうか?
宜しくお願い致します。

01 Imports Renci.SshNet
02 Imports MySql.Data.MySqlClient
-----------------------------------------------------------------------------------------------
03 Public Class Mainform

04  'SSH接続設定
05  Friend ssh_port As Integer = 2222          'サーバ側SSHの待ち受けport番号(デフォルト値を変更しています。)
06  Friend ssh_host As String = 192.168.10.36  'リモートホストのIPアドレス
07  Friend ssh_user As String = "aaa"          'サーバーのユーザー名
08  Friend ssh_key As PrivateKeyFile = New PrivateKeyFile("C:\Users\user\Documents\aaa\id_rsa.pem","pass01")
                                               '("秘密キーのパス", "キーのパスフレーズ")'
09  Friend ssh_mthd As AuthenticationMethod = New PrivateKeyAuthenticationMethod(ssh_user, ssh_key)
10  Friend ssh_cninf As ConnectionInfo = New ConnectionInfo(ssh_host, ssh_port, ssh_user, ssh_mthd)
11  Friend ssh_client As SshClient = New SshClient(ssh_cninf)

12  ' ポートフォワーディング設定
13  Dim localPort As Integer = 49999   'クライアント機の空きポート番号
14  Dim remotePort As Integer = 3306   'サーバー機のMySQL用ポート番号
15  Dim fpl = New ForwardedPortLocal("127.0.0.1", localPort, ssh_Host, remotePort)

16  'DB接続設定
17  Friend mysql_conn As MySqlConnection
18  Friend mysql_db As String = "schm01"     '対象データベース
19  Friend mysql_user As String = "bbb"      'MySQLユーザー
20  Friend mysql_pswd As String = "pass02"   'bbbのMySQLパスワード
     ・・・・・
-----------------------------------------------------------------------------------------
21 Sub New()

22  InitializeComponent()

23  'SSH接続
24  ssh_client.Connect()
       
25  'ポート転送
26  ssh_client.AddForwardedPort(fpl)
27  fpl.Start()
 
28  'MySQLログイン
29  Dim cnstr As String = $"server={fpl.BoundHost};" &
30                        $"port={fpl.BoundPort};" &
31                        $"database={mysql_db};" &
32                        $"user={mysql_user};" &
33                        $"password={mysql_password}"

34  mysql_conn = New MySqlConnection(cnstr)
35  mysql_conn.Open()
 
以上、最後まで目を通していただきありがとうございます。
I

引用返信 編集キー/
■101986 / inTopicNo.2)  Re[1]: Ubuntuサーバー上のMySQLに接続できません。
□投稿者/ kiku (349回)-(2023/05/24(Wed) 13:31:50)
No101985 (kitakitune さん) に返信
> 実現したいこと
> 以下の条件で、
> クライアント(VB.NETフォームアプリ)から
> サーバー(os:ubuntu 22.04.02 LTS)のデータベース(MySQL 8.0.33)に接続する。
>
> 条件
> 1.クライアントとサーバー間はSSHで接続する。
> 2.MySQLの設定で、bind-addressは‘127.0.0.1’とする。
> 3.MySQLにログインするユーザーは 'xxx'@'localhost'とする。
>
> 以下の手順で実装できると考えい自分なりにコーディングしましたが、
>  (サーバーにSSH接続する-ポートを転送する-MySQLにログインする)
> 思うように動作しません。(bind-addressが‘127.0.0.1’ではログインできません。)

まず切り分けとして、mysql-workbenchからSSH上でログインできることを
確認してみてはどうでしょう。
例えばこんな記事を見つけました。
https://yoshinorin.net/articles/2018/10/17/mysql-workbench-ssh-port-tunneling/
引用返信 編集キー/
■101987 / inTopicNo.3)  Re[2]: Ubuntuサーバー上のMySQLに接続できません。
□投稿者/ kitakitune (17回)-(2023/05/24(Wed) 14:26:18)
No101986 (kiku さん) に返信
御返信ありがとうございます。

MySQL Workbench 及び Tera Term からはSSH公開鍵認証にて、
MySQLのバインドアドレスを'127.0.0.1'の設定でデータベースに同一ユーザーで接続できます。
またローカルホストのユーザーでもログイン出来ています。
引用返信 編集キー/
■101990 / inTopicNo.4)  Re[3]: Ubuntuサーバー上のMySQLに接続できません。
□投稿者/ kiku (350回)-(2023/05/24(Wed) 18:06:06)
No101987 (kitakitune さん) に返信
> ■No101986 (kiku さん) に返信
> 御返信ありがとうございます。
>
> MySQL Workbench 及び Tera Term からはSSH公開鍵認証にて、
> MySQLのバインドアドレスを'127.0.0.1'の設定でデータベースに同一ユーザーで接続できます。
> またローカルホストのユーザーでもログイン出来ています。

問題がなさそうに見えますね。
MySQL Workbenchで設定した情報と、
VB.NETアプリで設定した情報は同じでしょうか?
何度も確認しているとは思いますが、念のため、もう一度確認してもらえませんか?

ソースの下記まで実行し、
27 fpl.Start()
MySQL WorkbenchでSSH接続の設定やポートフォワードの設定を除いてDBに接続できないでしょうか?

引用返信 編集キー/
■101991 / inTopicNo.5)  Re[4]: Ubuntuサーバー上のMySQLに接続できません。
□投稿者/ kitakitune (18回)-(2023/05/24(Wed) 18:43:15)
No101990 (kiku さん) に返信

>>御返信ありがとうございます。

> ソースの下記まで実行し、
> 27  fpl.Start()
> MySQL WorkbenchでSSH接続の設定やポートフォワードの設定を除いてDBに接続できないでしょうか?

上記の部分の意味が私のスキルでは理解できません。

また、 27  fpl.Start() の後に

 If ssh_client IsNot Nothing AndAlso ssh_client.IsConnected Then
    MessageBox.Show("転送OK", "ssh_db接続", MessageBoxButtons.OK)
 End If

というコードを追加したところ、"転送OK" というメッセージを確認できたので、
ポートフォワーディングまでは、正常に機能していると考えています。

尚、最初に記述したコードで転記する際に手を加えたとことで少し誤りがありましたので、冗長ではありますが
再度掲載させて頂きます。

01 Imports Renci.SshNet
02 Imports MySql.Data.MySqlClient
-----------------------------------------------------------------------------------------------
03 Public Class Mainform

04  'SSH接続設定
05  Friend ssh_port As Integer = 2222          'サーバ側SSHの待ち受けport番号(デフォルト値を変更しています。)
06  Friend ssh_host As String = “192.168.10.36”  'リモートホストのIPアドレス
07  Friend ssh_user As String = "aaa"          'サーバーのユーザー名
08  Friend ssh_key As PrivateKeyFile = New PrivateKeyFile("C:\Users\user\Documents\aaa\id_rsa.pem","pass01")
'("秘密キーのパス", "キーのパスフレーズ")'
09  Friend ssh_mthd As AuthenticationMethod = New PrivateKeyAuthenticationMethod(ssh_user, ssh_key)
10  Friend ssh_cninf As ConnectionInfo = New ConnectionInfo(ssh_host, ssh_port, ssh_user, ssh_mthd)
11  Friend ssh_client As SshClient = New SshClient(ssh_cninf)

12  ' ポートフォワーディング設定
13  Dim localPort As Integer = 49999   'クライアント機の空きポート番号
14  Dim remotePort As Integer = 3306   'サーバー機のMySQL用ポート番号
15  Dim fpl = New ForwardedPortLocal("127.0.0.1", localPort, ssh_host, remotePort)

16  'DB接続設定
17  Friend mysql_conn As MySqlConnection
18  Friend mysql_db As String = "schm01"     '対象データベース
19  Friend mysql_user As String = "bbb"      'MySQLユーザー
20  Friend mysql_pswd As String = "pass02"   'bbbのMySQLパスワード
     ・・・・・
-----------------------------------------------------------------------------------------
21 Sub New()

22  InitializeComponent()

23  'SSH接続
24  ssh_client.Connect()
       
25  'ポート転送
26  ssh_client.AddForwardedPort(fpl)
27  fpl.Start()
 
28  'MySQLログイン
29  Dim cnstr As String = $"server={fpl.BoundHost};" &
30                        $"port={fpl.BoundPort};" &
31                        $"database={mysql_db};" &
32                        $"user={mysql_user};" &
33                        $"password={mysql_pswd}"

34  mysql_conn = New MySqlConnection(cnstr)
35  mysql_conn.Open()


修正点 
06 IPアドレスを文字列とする””が抜けていました。
33 参照する変数名に間違いがありました mysql_password を mysql_pswd に変更
I



引用返信 編集キー/
■101992 / inTopicNo.6)  Re[5]: Ubuntuサーバー上のMySQLに接続できません。
□投稿者/ 伝説のカレー (108回)-(2023/05/24(Wed) 19:26:56)
No101991 (kitakitune さん) に返信

んーなんでしょうね、ポート番号が被ってたりしないですか?
私はつい最近それでハマりました
ダメ元でポート番号変えてみると良いことあるかもしれないです

 If ssh_client IsNot Nothing AndAlso ssh_client.IsConnected Then
    MessageBox.Show("転送OK", "ssh_db接続", MessageBoxButtons.OK)
 End If

これはSSHの接続ができてますの確認ですね

If fpl.IsStarted Then
 …
End If

でポートフォワードできてますの確認もやってみたが良いかもしれないです

引用返信 編集キー/
■101994 / inTopicNo.7)  Re[6]: Ubuntuサーバー上のMySQLに接続できません。
□投稿者/ kitakitune (19回)-(2023/05/24(Wed) 19:42:49)
No101992 (伝説のカレー さん) に返信

> If fpl.IsStarted Then
>  …
> End If
>
> でポートフォワードできてますの確認もやってみたが良いかもしれないです
>
上記のコードも追加し確認したところ、やはり問題はありませんでした。

お忙しいところお付き合いくださいまして本当にありがとうございました。

本日、所要にて以降御返答ができない状態になります。
もし、何か御気付きの点でもおありでしたら、ご投稿いただければ幸いです。

いうまでもないことですが、このまま御放置頂きましても何ら問題ございません。
(生意気な書きようで申し訳ありません。)
今一度パラ―メータの値の確認やポートの変更など行って試してみようと思います。

重ねて、御礼申し上げます。本当にありがとうございました。
引用返信 編集キー/
■101996 / inTopicNo.8)  Re[5]: Ubuntuサーバー上のMySQLに接続できません。
□投稿者/ kiku (351回)-(2023/05/25(Thu) 08:51:27)
No101991 (kitakitune さん) に返信
> ■No101990 (kiku さん) に返信
>
> >>御返信ありがとうございます。
>
>>ソースの下記まで実行し、
>>27 fpl.Start()
>>MySQL WorkbenchでSSH接続の設定やポートフォワードの設定を除いてDBに接続できないでしょうか?
>
> 上記の部分の意味が私のスキルでは理解できません。

テストの趣旨は、アプリでポートフォワーディングまで動作させる。
これによって、ポート49999にアクセスすると、
サーバのポート3306にアクセスできることになる。

この状態で、Workbenchから49999にアクセスすることで
DBに接続することが確認できれば、
ポートフォワーディングが正しく動作していることが
動作で確認できると思ったしだいです。

>If ssh_client IsNot Nothing AndAlso ssh_client.IsConnected Then
>  MessageBox.Show("転送OK", "ssh_db接続", MessageBoxButtons.OK)
> End If
>
>というコードを追加したところ、"転送OK" というメッセージを確認できたので、
>ポートフォワーディングまでは、正常に機能していると考えています。

上記はソースには記述していませんでしたが
すでに確認しているかなと思ったため、
もう少し踏み込んだ確認方法を提案したしだいです。

引用返信 編集キー/
■101997 / inTopicNo.9)  Re[6]: Ubuntuサーバー上のMySQLに接続できません。
□投稿者/ radian (132回)-(2023/05/25(Thu) 09:32:14)
MySQLサーバ側で詳細なログを出力するようにして、
接続できるパターン(MySQL Workbench、TeraTerm含む)と
できないパターンのログ付き合わせたりして違いがあるか調べてみるとか。
引用返信 編集キー/
■101998 / inTopicNo.10)  Re[7]: Ubuntuサーバー上のMySQLに接続できません。
□投稿者/ kitakitune (20回)-(2023/05/25(Thu) 14:24:30)
No101997 (radian さん) に返信
御回答下さったみなさまありがとうございました。

未だ、解決には至ってないのですが、皆様のアドバイスをもとにもう少し、
自己解決できるよう検証してみようと思います。
解決済み
引用返信 編集キー/
■102001 / inTopicNo.11)  Re[8]: Ubuntuサーバー上のMySQLに接続できません。
□投稿者/ WebSurfer (2696回)-(2023/05/26(Fri) 10:12:57)
No101998 (kitakitune さん) に返信

続きはこっち ↓ ですか?

MySQLにログインできません。
https://teratail.com/questions/p96g3mc7or1hh3

> 本日、所要にて以降御返答ができない状態になります。

という話ではなかったのですか?

場所を移すこと自体は異論ありませんが、それならその旨書いて、移った先の
URL を明記しておいてはいかが?

検索などでここにたどり着いた人が、URL から移った先を見て、その人の役に
立つ情報が得られるということがあるかもしれません。
引用返信 編集キー/
■102017 / inTopicNo.12)  Re[9]: Ubuntuサーバー上のMySQLに接続できません。
□投稿者/ kitakitune (21回)-(2023/05/29(Mon) 12:37:39)
No102001 (WebSurfer さん) に返信
> ■No101998 (kitakitune さん) に返信
>
> 続きはこっち ↓ ですか?
>
> MySQLにログインできません。
> https://teratail.com/questions/p96g3mc7or1hh3
>
>>本日、所要にて以降御返答ができない状態になります。
>
> という話ではなかったのですか?
>
> 場所を移すこと自体は異論ありませんが、それならその旨書いて、移った先の
> URL を明記しておいてはいかが?
>
> 検索などでここにたどり着いた人が、URL から移った先を見て、その人の役に
> 立つ情報が得られるということがあるかもしれません。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -