まず、そのユーザーがmysqlにリモートアクセスできるようにする方がよいのではないでしょうか。しかし、あなたの理由はわかりません。
最も一般的な透過的な方法は、sshトンネルを作成することです。これは、2つの異なる方法で実行できます。 mysqlポート(3306)がmysqlマシンで開いていない場合は、リモートマシンで開く必要があるリバースsshトンネルが必要になります。 mysqlマシンにログインし、次のコマンドを発行します。
ssh -R 12345:localhost:3306 [email protected]_machine -N
リモートマシンでmysqlポートが開いている場合は、phpマシンでトンネルを開くことができます。
ssh -f [email protected]_machine -L 12345:mysql_machine:3306 -N
トンネルの作成方法に関係なく、PHPアプリケーションはPDOを使用して、ローカルホストポート12345に接続できるようになりました。
$pdo = new PDO('mysql:host=localhost;port=12345;dbname=test', $user, $password);
すべてのトラフィックはトンネルを介して暗号化されます。
いくつかの簡単なコマンドを発行したいだけの場合は、次の方法を使用できます。
最も単純ですが安全ではありません 次のコマンドを使用する方法があります:
echo $ssh->exec('mysql -uUSER -pPASSWORD DATABASE -e "SQL COMMAND"');
システム上の他のユーザーがパスワードを見る可能性があるため、これは安全ではありません。
expect
を使用してセキュリティの問題を回避できます 。 期待するコード> より安全な方法でmysqlにパスワードを渡すことができるプログラムです。
expected
であることを確認してください リモートシステムにインストールされています。 SHOW TABLES
を使用した例を次に示します。 データベースのコマンドtest
:
include('Net/SSH2.php');
$ssh = new Net_SSH2('192.xxx.xxx.xxx');
if (!$ssh->login('ssh_user', 'ssh_password')) {
exit('Login Failed');
}
echo $ssh->exec('expect <<EOF
# disable command output
log_user 0
# start the mysqldump process
spawn mysql -uTHE_USER -p test -e "SHOW TABLES"
# wait for the password prompt
expect "password:"
# send the password (mind the \r)
send "THE_PASSWORD\r"
# enable output again
log_user 1
# echo all outout until the end
expect eof
EOF
');
何が起こっているのかをさらに理解するために、私は最近、私のブログ記事 それについて。