APサーバ環境
- PHP 7.3.12
DB/SSHサーバ環境
- CentOS 7.7.1908
- MySQL 8.0.19
実現したいこと
PHPアプリケーション内でSSHポートフォワーディング(トンネル)を構築して、
PHPアプリケーションからMySQLに接続したいです。
試したこと
こちらを参考にし、下記コードを書いてみました。
PHP
1<?php 2 $ret; 3 $output; 4 try { 5 $cmd = 'ssh -f -N -L 19000:server.ne.jp:3306 root@server.ne.jp -i ./key/id_rsa 2>&1'; 6 exec($cmd,$output,$ret); 7 var_dump($output, $ret); 8 echo '<br>'; 9 } catch (Exception $e) { 10 exit('捕捉した例外:'.$e->getMessage()); 11 } 12 13 $dsn = 'mysql:dbname=mydb;host=127.0.0.1;charset=utf8mb4'; 14 $user = 'username'; 15 $pass = 'P@ssw0rd'; 16 try { 17 $pdo = new PDO($dsn,$user,$pass, 18 [ 19 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 20 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 21 ] 22 ); 23 } catch (PDOException $e) { 24 exit('データベース接続失敗。'.$e->getMessage()); 25 } 26?>
上記コードを実行すると以下、画面に表示されます。
array(1) { [0]=> string(29) "Host key verification failed." } int(255)
データベース接続失敗。SQLSTATE[HY000] [2002] Connection refused
教えていただきたいこと(わからないこと)
- execコマンドの第3引数で成功したかどうかわかるとのことで表示してみたら255と返ってきましたが、PHP初心者のため、何が原因で失敗しているのか、この先何を試したらよいか分かりません。。。
- その他、どうすればSSH経由でMySQLに接続できるか教えていただきたく。
補足
- 当方手元のPCはwindowsです。TeraTermからSSHポートフォワーディングを行い、ODBC接続でMySQLに接続できることは確認しています。(ので、コマンドの接続情報やポート番号等は間違いありません。)
- MySQLのユーザの認証方法は「mysql_native_password」です。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー