使用phpseclib库连接到mysql数据库
我已使用phpscelib库成功连接到我的VPS。现在我想连接到我的现有数据库。请帮助我完成此操作使用phpseclib库连接到mysql数据库,php,mysql,shell,vps,phpseclib,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 Fail
<?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端口(3306)未在mysql机器上打开,则需要一个反向ssh隧道,该隧道必须由远程机器打开。登录mysql机器并发出以下命令:
ssh -R 12345:localhost:3306 user@php_machine -N
echo $ssh->exec('mysql -uUSER -pPASSWORD DATABASE -e "SQL COMMAND"');
如果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);
所有车辆都将通过隧道加密
如果您只想发出几个简单的命令,可以使用以下替代方法 最简单但不安全的方法是使用以下命令:
ssh -R 12345:localhost:3306 user@php_machine -N
echo $ssh->exec('mysql -uUSER -pPASSWORD DATABASE -e "SQL COMMAND"');
这是不安全的,因为系统上的其他用户可以看到密码
您可以使用expect
解决安全问题expect
是一个可以以更安全的方式将密码传递给mysql的程序。确保远程系统上安装了expect
。下面是一个在数据库test
上使用showtables
命令的示例:
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
');
include('Net/SSH2.php');
$ssh=newnetssh2('192.xxx.xxx.xxx');
if(!$ssh->login('ssh\u user','ssh\u password')){
退出(“登录失败”);
}
echo$ssh->exec('expect首先,允许该用户远程访问mysql不是更好吗?但是,我不知道你的原因
最常见的透明方式是创建ssh隧道。这可以通过两种不同的方式完成。如果mysql计算机上未打开mysql端口(3306),则需要远程计算机打开反向ssh隧道。登录mysql计算机并发出以下命令:
ssh -R 12345:localhost:3306 user@php_machine -N
echo $ssh->exec('mysql -uUSER -pPASSWORD DATABASE -e "SQL COMMAND"');
如果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);
所有车辆都将通过隧道加密
如果您只想发出几个简单的命令,可以使用以下替代方法
最简单但不安全的方法是使用以下命令:
ssh -R 12345:localhost:3306 user@php_machine -N
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
');
include('Net/SSH2.php');
$ssh=newnetssh2('192.xxx.xxx.xxx');
if(!$ssh->login('ssh\u user','ssh\u password')){
退出(“登录失败”);
}
echo$ssh->exec('expectshort and simple
echo $ssh->exec('echo "select * from table where company_id=\"15\";" | mysql -u username -password=password database');
简明扼要
echo $ssh->exec('echo "select * from table where company_id=\"15\";" | mysql -u username -password=password database');
可能重复的不是重复的我想也是,但hek2mgl的答案更好。可能重复的不是重复的,我想也是,但hek2mgl的答案更好。我想连接到mysql并开始一些插入、更新CUID的过程。这是什么?这是一个如何发出命令的示例..我我在数据库测试中使用SHOW TABLES
命令。您不需要将expect与phpseclib一起使用。只需执行$ssh->write(“…”),然后执行$read->(“…”)其中传递给read的参数是您所期望的。它可以采用字符串文本或正则表达式的形式。正则表达式的示例:what isCMDS
?what ispcs
?@hek2mgl-问题是您没有在命令结束之前添加“\n”。例如,$ssh->write(“mysql-uroot-p test-e'SHOW TABLES”);
应该是$ssh->write(“mysql-uroot-p test-e'SHOW TABLES'\n”)
。我的意思是,当你在终端中键入命令时,你通常会按enter键,不是吗?你不只是键入命令,而不是按enter键,期望Linux神奇地运行它,是吗?我想连接到mysql并开始一些插入、更新CUID的过程。这是什么?这是一个如何发出命令的示例。我正在使用SHOW t在数据库测试中使用ABLES
命令。您不需要将expect与phpseclib一起使用。只需执行$ssh->write(“…”),然后执行$read->(“…”)其中传递给read的参数是您所期望的。它可以采用字符串文本或正则表达式的形式。正则表达式的示例:what isCMDS
?what ispcs
?@hek2mgl-问题是您没有在命令结束之前添加“\n”。例如,$ssh->write(“mysql-uroot-p test-e'SHOW TABLES”)
应该是$ssh->write(“mysql-uroot-p test-e'SHOW TABLES'\n”);
。我的意思是,当你在终端中键入命令时,你通常会按enter键,不是吗?你不只是键入命令,而不是按enter键,期望Linux神奇地运行它,是吗?