我知道这个问题之前曾被问过几次,但是发布的解决方案对我没用。我尝试了所有这些。
所以这是我的问题
问)我需要使用用户名@username和密码@password登录@server。在该服务器上,我必须使用mysql @sql_password的另一个密码,然后开始查询。
PUTTY
我开始putty连接到@server,给@username和@password,我得到连接。然后我发出mysql -p@sql_password
并且我已经连接到mysql。然后我可以使用数据库并开始查询
但现在我需要在PHP中执行此操作!
PHP
第一种方法: - 使用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');
第二种方法使用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
,而在命令行上我看到了正确的用户名。
我真的迷失在这里。任何帮助将不胜感激
感谢
答案 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");