使用phpseclib库连接到mysql数据库

时间:2013-08-16 10:14:40

标签: php mysql shell vps phpseclib

我已经使用phpscelib库成功连接到我的VPS。现在我想连接到我现有的数据库。请帮帮我吗?

<?php
set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');

include('Net/SSH2.php');


$ssh = new Net_SSH2('192.ccc.ccc.ccc');
if (!$ssh->login('ccc', 'cccc')) {
exit('Login Failed');
}

echo $ssh->exec("I need to put MySql commands here");
?>

2 个答案:

答案 0 :(得分:4)

首先,允许该用户远程访问mysql不是更好吗?但是,我不知道你的原因。

最常见的透明方式是创建一个ssh隧道。这可以通过两种不同的方式完成。如果mysql端口(3306)未在mysql机器上打开,则需要一个必须由远程机器打开的反向ssh隧道。登录mysql机器并发出以下命令:

ssh -R 12345:localhost:3306 user@php_machine -N

如果mysql端口在远程计算机上打开,则可以通过php机器打开隧道:

ssh -f user@mysql_machine -L 12345:mysql_machine:3306 -N

无论隧道的创建方式如何,PHP应用程序现在只需使用PDO并连接到localhost端口12345即可。

$pdo = new PDO('mysql:host=localhost;port=12345;dbname=test', $user, $password);

所有流量都将通过隧道加密。


如果您只想发布几个简单的命令,可以使用以下替代方法。

最简单但不安全方式是使用以下命令:

echo $ssh->exec('mysql -uUSER -pPASSWORD DATABASE -e "SQL COMMAND"');

这是不安全的,因为系统上的其他用户可以看到密码。

您可以使用expect解决安全问题。 expect是一个可以以更安全的方式将密码传递给mysql的程序。确保远程系统上安装了expect。以下是在数据库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
');

为了进一步了解发生了什么,我最近写了一篇关于它的blog article

答案 1 :(得分:2)

短而简单

echo $ssh->exec('echo "select * from table where company_id=\"15\";" | mysql -u username -password=password database');