繁体   English   中英

使用phpseclib库连接到mysql数据库

[英]connect to the mysql database using phpseclib library

我已经使用phpscelib库成功连接到My 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");
?>

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

最常见的透明方法是创建ssh隧道。 这可以通过两种不同的方式来完成。 如果未在mysql机器上打开mysql端口(3306),则需要一个反向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并连接到本地主机端口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安装在远程系统上。 这是在数据库test使用SHOW TABLES命令的示例:

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
');

为了进一步了解正在发生的事情,我最近写了一篇博客文章

简短

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM