使用 phpseclib 的 Net ssh2类在远程服务器上能够执行许多命令。现在我需要从服务器检索某个 XML 文件的内容,问题是当我像这样运行一个 linux cat cmd时:
$ssh = new Net_SSH2($host, $port);
if($ssh->connect($username, $password)){
$script = "cat '$xml_file'";
$output = $ssh->exec($script);
}else{
exit('Login Failed');
}
$Output是一个空数组。我通过puTTY在服务器本身上运行$script命令,并在这里返回XML文件的内容,从而对其进行了双重检查。这是否是因为phpseclib的实现出了问题,使其无法返回正确的输出?
ChatGPT尝试为您解答,仅供参考
在调用 Net_SSH2::exec() 方法时,该方法返回的是命令的输出。如果命令执行成功,则返回命令的输出;如果命令执行失败,则返回空字符串。因此,如果返回的是空数组,则可能是因为命令执行失败。
可以通过使用 Net_SSH2::getExitStatus() 方法检查命令的退出状态来确定命令是否成功执行。如果命令执行成功,则此方法返回 0;如果命令执行失败,则返回非 0 值。
例如,可以使用以下代码检查命令的退出状态:
$ssh = new Net_SSH2($host, $port);
if($ssh->connect($username, $password)){
$script = "cat '$xml_file'";
$output = $ssh->exec($script);
$exit_status = $ssh->getExitStatus();
if ($exit_status !== 0) {
exit('Command Failed');
}
}else{
exit('Login Failed');
}
如果命令执行失败,则应该检查命令的语法是否正确,并检查服务器上的权限是否正确。您还可以使用 Net_SSH2::getErrors() 方法获取错误信息,这可能有助于更好地了解问题。