簡體   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