PHP-код для подключения к MySQL через SSH с использованием phpseclib

Я хочу подключиться к MySQL на сервере, но доступ к серверу возможен только через SSH. Я использую phpseclib для подключения к SSH. И это было успешно. Но при попытке подключиться к MySQL он сказал: Доступ запрещен. Итак, у меня есть этот код. Кто-нибудь, пожалуйста, помогите мне..

<?php

//data for connection to SSH
//host : 10.81.229.31
//user : root
//pass : abcde

//here's data for connection to MySQL
//host = 10.81.229.31
//username = root
//password = abcde
//database name = testing


include('Net/SSH2.php');

//connecting to server with SSH
$ssh = new Net_SSH2('10.81.229.31');

if (!$ssh->login('root', 'abcde')) {
    exit('Login Failed');
}else{
    echo "Login Success";
}

//connecting to MySQL
echo $ssh->exec('mysql -h 10.81.229.31 -u root -p testing');

?>

person starter_id    schedule 21.01.2014    source источник
comment
Попробуйте войти на сервер с помощью ssh, а затем попробуйте подключиться к mysql и посмотреть, работает ли это.   -  person Abhik Chakraborty    schedule 21.01.2014
comment
каков был полный код ошибки MySQL? Кроме того, если это удаленная база данных, у MySQL должно быть разрешение на удаленный доступ.   -  person Panama Jack    schedule 21.01.2014
comment
@PanamaJack: ошибки нет, но все еще долго загружается. И до сих пор никакого результата. Когда этот код удален: echo $ssh-›exec('mysql -h 10.81.229.31 -u root -p testing'); Он покажет сообщение: Вход в систему выполнен успешно. Как узнать, что MySQL на сервере имеет разрешение на удаленный доступ? Я попытался использовать «PUTTY», и он успешно...   -  person starter_id    schedule 21.01.2014
comment
Вы пробовали точно такую ​​же команду в шпаклевке?   -  person Marcel Balzer    schedule 21.01.2014
comment
@MarcelBalzer: я использую эту команду «mysql -h localhost -u root -p testing», но когда я использую ее с php-кодом, это не работает ...   -  person starter_id    schedule 21.01.2014
comment
Хорошо, и это работает, когда вы подключаетесь к PUTTY, но не к PHP?   -  person Marcel Balzer    schedule 21.01.2014
comment
@MarcelBalzer: да..   -  person starter_id    schedule 21.01.2014
comment
Я думаю, что нашел проблему.. При использовании PUTTY после этой команды нам требуется ввести пароль.. При использовании PHP после этой команды я не знаю, как ввести пароль... Кто-нибудь знает?   -  person starter_id    schedule 21.01.2014


Ответы (3)


Попробуйте без пробела. например.

echo $ssh->exec('mysql -h localhost -u root -ptesting');

Цитата из "man mysql":

--password[=пароль], -p[пароль]

person neubert    schedule 21.01.2014
comment
Большое спасибо... это правильно.. Успешный вход в mySQL. Я опубликую правильный код. - person starter_id; 23.01.2014

Когда вы используете ssh внутри коробки, вы должны ссылаться на базу данных как на локальный хост.

echo $ssh->exec('mysql -h localhost -u root -ptesting');
person sunshinekitty    schedule 21.01.2014
comment
команда: 'mysql -h localhost -u root -p testing' это работает с PUTTY, но почему это не работает с php-кодом.. Я так запутался ^_^ - person starter_id; 21.01.2014
comment
Вы также можете попробовать не включать аргумент -h - person sunshinekitty; 21.01.2014
comment
все еще не работает.. могу я спросить вас, знаете ли вы, как использовать код $ssh-›write() ? можете ли вы привести пример .. спасибо перед - person starter_id; 21.01.2014
comment
Вам нужно будет сделать \n после команды, чтобы использовать ее с $ssh->write(). Но это не единственная проблема. Смотрите мой ответ. - person neubert; 22.01.2014

<?php

//data for connection to SSH
//host : 10.81.229.31
//user : root
//pass : abcde

//here's data for connection to MySQL
//host = 10.81.229.31
//username = root
//password = abcde
//database name = testing


include('Net/SSH2.php');

//connecting to server with SSH
$ssh = new Net_SSH2('10.81.229.31');

if (!$ssh->login('root', 'abcde')) {
    exit('Login to Server Failed');
}else{
    echo "Login to Server Success";
}

//connecting to MySQL
if (!$ssh->exec('mysql -u root -ptesting \r\n')){
    exit('Login to MySQL Failed');
}else{
    echo "Login to MySQL Success";
}

?>

\r\n используется для ENTER И результат:

Login to Server SuccessLogin to MySQL Success

Большое спасибо всем, кто мне уже помогает..

person starter_id    schedule 23.01.2014
comment
Вам нужен \r\n только если вы делаете $ssh->write ;) В остальном выглядит хорошо! - person neubert; 23.01.2014