Mysql连接到PHP中的远程服务器

时间:2014-08-11 21:37:19

标签: php mysql wampserver phpseclib ssh-tunnel

我知道这个问题之前曾被问过几次,但是发布的解决方案对我没用。我尝试了所有这些。
所以这是我的问题

问)我需要使用用户名@username和密码@password登录@server。在该服务器上,我必须使用mysql @sql_password的另一个密码,然后开始查询。

PUTTY
我开始putty连接到@server,给@username和@password,我得到连接。然后我发出mysql -p@sql_password并且我已经连接到mysql。然后我可以使用数据库并开始查询 但现在我需要在PHP中执行此操作!

PHP

  1. 第一种方法: - 使用phpseclib建立SSH连接,然后尝试连接到mysql。不幸的是,当我发出mysql -p@sql_password命令时,我的代码一直在运行,我在屏幕上看不到任何内容。现在一些解决方案谈到使用不同的语法,但似乎没有什么对我有用。
    这是简单的代码

    set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
    include('phpseclib/Net/SSH2.php');
    
    $server=@server;
    $username=@username;
    $password=@password;
    $sql_password=@sql_password;
    
    
    $ssh = new Net_SSH2($server);
    if (!$ssh->login($username, $password)) {
      exit('Login Failed');
    }
    
    echo $ssh->exec('whoami');
    
    
    echo $ssh->exec('mysql -p@sql_password');
    
  2. 第二种方法使用PHP Shell_exec命令和plink
    从命令行我可以发出plink -ssh @username@@server -pw@password,它似乎正常工作。从那时起它和腻子一样。现在,当我尝试在php中使用shell_exec时,它似乎无法正常工作。例如echo shell_exec('plink');为我提供了plink的所有选项,但是当我运行echo shell_exec ('plink -ssh @username@@server -pw@password');时,它什么都没有给我。我做whoami尝试找出事情并得到nt/authority system,而在命令行上我看到了正确的用户名。

    我真的迷失在这里。任何帮助将不胜感激 感谢

2 个答案:

答案 0 :(得分:0)

编辑:如果您无法访问服务器,我的fisrt解决方案将无效:

第二个解决方案,更正ssh连接的代码:

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

-p和传球之间没有空格。


第一个解决方案:

我建议你这个解决方案:

在您的本地计算机上

set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
include('phpseclib/Net/SSH2.php');

$server=@server;
$username=@username;
$password=@password;


$ssh = new Net_SSH2($server);
if (!$ssh->login($username, $password)) {
  exit('Login Failed');
}

echo $ssh->exec('php script.php');

在服务器上

script.php

mysql -p@sql_password


然后,您可以避免在本地计算机上显示mysql密码的安全问题。我还建议你使用ssh的公钥/私钥。

答案 1 :(得分:0)

你可以做点像......

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

你也可以......

$ssh->write("mysql -p@sql_password\n");
echo $ssh->read("some prompt");
$ssh->write("SQL\n");

...等...

这可能也有效:

$ssh->enablePTY();
$ssh->exec("mysql -p@sql_password");
$ssh->read("some prompt");
$ssh->write("SQL\n");