実現したいこと
XAMPPを使ってSSH通信で外部のMySQLからDBに接続し、データを取得するクエリを実行する。
クエリ実行やセキュリティ対策は一先ずおいて起き、まずは接続を確立させたい。
発生している問題・分からないこと
「Fatal error: Uncaught mysqli_sql_exception: Access denied for user 'okane_db'@'localhost' (using password: YES) in C:\xampp\htdocs\today.php:34 Stack trace: #0 C:\xampp\htdocs\today.php(34): mysqli_connect('localhost', 'okane_db', 'pepepe', 'okane_db', 3306) #1 {main} thrown in C:\xampp\htdocs\today.php on line 34」
というエラーが発生し、接続が拒否される。
該当のソースコード
php
1<?php 2 3// SSH接続情報 4$ssh_host = "okane.sakura.ne.jp"; // SSHサーバーのホスト名 5$ssh_port = 22; // SSHポート番号 6$ssh_user = "okane"; // SSHユーザー名 7$ssh_password = "******"; // SSHパスワード 8 9// MySQL接続情報 10$mysql_host = 'localhost'; // ローカルホスト 11$mysql_port = 3306; // ローカルMySQLポート番号 12$mysql_user = "okane_db"; // MySQLユーザー名 13$mysql_password = "pepepe"; // MySQLパスワード 14 15// SSH接続を確立 16$connection = ssh2_connect($ssh_host, $ssh_port); 17if (!$connection) { 18 die('SSH connection failed'); 19} 20 21// SSHユーザー名とパスワードで認証 22if (!ssh2_auth_password($connection, $ssh_user, $ssh_password)) { 23 die('SSH authentication failed'); 24} 25 26// SSHトンネルを作成(ローカルポートフォワーディング) 27$forwarded_port = ssh2_tunnel($connection, $mysql_host, $mysql_port); 28if (!$forwarded_port) { 29 die('Failed to create SSH tunnel'); 30} 31 32// MySQLに接続 手続き型 33 34$mysql_connection = mysqli_connect($mysql_host, $mysql_user, $mysql_password, "okane_db", $mysql_port); 35 36// 接続エラーをチェック 37if (mysqli_connect_errno()) { 38 die('MySQL connection failed: ' . mysqli_connect_error()); 39} 40 41 42// 接続成功時の処理 43echo 'Connected to MySQL via SSH tunnel'; 44 45// ここでMySQLクエリを実行するなどの処理を行う 46 47// MySQL接続を閉じる 48if($mysql != null){ 49 mysqli_close($mysql); 50} 51 52// SSH接続を閉じる 53ssh2_disconnect($connection); 54 55?> 56
php.ini
1[Syslog] 2define_syslog_variables=Off 3[Session] 4define_syslog_variables=Off 5[Date] 6date.timezone=Europe/Berlin 7[MySQL] 8mysql.allow_local_infile=On 9mysql.allow_persistent=On 10mysql.cache_size=2000 11mysql.max_persistent=-1 12mysql.max_link=-1 13mysql.default_port=3306 14mysql.default_socket="MySQL" 15mysql.connect_timeout=3 16mysql.trace_mode=Off 17[Sybase-CT] 18sybct.allow_persistent=On 19sybct.max_persistent=-1 20sybct.max_links=-1 21sybct.min_server_severity=10 22sybct.min_client_severity=10 23[MSSQL] 24mssql.allow_persistent=On 25mssql.max_persistent=-1 26mssql.max_links=-1 27mssql.min_error_severity=10 28mssql.min_message_severity=10 29mssql.compatability_mode=Off 30mssql.secure_connection=Off 31 32extension=php_ssh2.dll
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
1:ユーザ名やパスワードといった接続情報に間違いがないが確認した
→正しい情報だったが接続が拒否された
2:オブジェクト指向型の「mysqli()」やPOD型の「POD()」での接続を試した
→同様のエラーが発生した
3:phpMyAdminを使っての接続を試した
→同様のエラーが発生した
4:ローカル環境でMySQLとDBを作成し、上記と同様の方法で接続をした
→接続の確認が出来た
5:接続したいDBの権限を確認した
→ GRANT USAGE ON . TO 'okane_db'@'localhost'
GRANT ALL PRIVILEGES ON okane_db
.* TO 'okane_db'@'localhost'
6:接続したいDBのuserデータ等をコマンドで確認した
→root情報の接続が権限に付与されておらず確認できなかった
7:ポート番号の重複がないよう調整し、システムからMySQLを起動してphpから接続を試した
→接続が拒否された
ー追記 2024/03/08 18:47ー
8:$forwarded_portをポートとして接続する
→String、intどちらでもないため、引数として機能しなかった
9:バックグラウンドでsshトンネルを事前に掘る
→調べ方が悪いのか、全然わからない
現状:接続拒否が解決できていない
補足
PHP Version 8.1.25
SSH2 support
extension version 1.3.1
libssh2 version 1.10.0
環境 Windows10 Pro
コード一部情報は加工してあります。
最終的にはこのphpをAndroidStudio Javaから実行したく、その前段階の環境構築・検証として作成しました。
PHP関連の知識はほとんどないので手探り状態となっております。

回答1件
あなたの回答
tips
プレビュー