2013-08-16 49 views
1

我已經使用phpscelib庫成功連接到我的VPS。現在我想連接到我現有的數據庫。請幫我解決這個問題?使用phpseclib庫連接到mysql數據庫

<?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"); 
?> 
+1

的[經由SSH通過PHP連接到一個MySQL數據庫]可能重複(http://stackoverflow.com/questions/18069658/connect-to-a-mysql-database-通過ssh通過PHP) – neubert

+0

那些不重複 – underscore

+0

也有http://stackoverflow.com/q/5980409/569976我猜,但hek2mgl的答案是更好,我認爲。 – neubert

回答

4

首先,允許遠程訪問該用戶到mysql是不是更好?但是,我不知道你的理由。

最常見的透明方式是創建一個ssh隧道。這可以通過兩種不同的方式完成。如果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解決安全問題。 expect是一個可以以更安全的方式將密碼傳遞給mysql的程序。確保在遠程系統上安裝了expect。這裏使用的數據庫testSHOW 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 
'); 

爲了進一步瞭解這是怎麼回事,我最近寫了我的blog article有關。

+0

我想連接到mysql並開始插入,更新CUID過程。這是什麼? – underscore

+0

這是一個如何發出命令的例子。我在數據庫測試中使用了'SHOW TABLES'命令。 – hek2mgl

+0

bash:-c:第0行:意外標記附近的語法錯誤'('bash:-c:line 0:'mysql – underscore

2

簡短

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