通过phpseclib exec函数执行的linux cat命令返回空结果

使用 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() 方法获取错误信息,这可能有助于更好地了解问题。