PHP执行SSH2命令

时间:2020-04-12 22:40:53

标签: php ssh phpseclib

我在使用PHP SSH2命令时遇到了一些问题。 因此,我已经成功地将专用服务器与应用程序相连,但是我不知道如何使用该命令运行命令。 当我写类似

的内容时,我正在使用phpsclib(http://phpseclib.sourceforge.net
echo $ssh->read('username@username:~$');
$ssh->write("ls -la\n");
echo $ssh->read();

它将给我一个来自root的列表,但是问题是我不想成为root。 我需要cd / another_file并执行将启动游戏服务器的命令。 我尝试过

$ssh->write("cd /another_file");
$ssh->write("my command here");

但是没有成功,它在同一行显示命令。 任何想法如何做到这一点?

1 个答案:

答案 0 :(得分:0)

您有几种选择。

  • 使用$ssh->write()链接命令:

    $ssh->write("cd /another_file && ls -la\n");
    

    ...或...

    $ssh->write("cd /another_file; ls -la\n");
    
  • 使用$ssh->exec()约束命令。除了不需要将\n附加到命令并且不需要打扰$ssh->read()之外,其工作方式与上述方法基本相同。

  • 执行多个$ssh->write()调用,这是您当前尝试执行的操作。但这是错误的:

    $ssh->write("cd /another_file");
    $ssh->write("my command here");
    

    在您的第一个代码段中,您要附加一个\n,但您并不需要在这些行中添加。您需要这样做是因为,当您处于交互式外壳中时,外壳知道您已经完成键入命令的方式是因为您按下了回车按钮。这就是Linux知道您已经完成输入并准备运行命令的方式。

    在运行下一个命令之前,您还需要阅读提示。例如。 $ssh->read('[prompt]')或适合您系统的任何内容。我想您可以像在第一个代码段中一样完全忽略将参数一起传递给$ssh->read(),但是$ssh->read()可能需要10秒钟左右的时间才能返回任何输出或者立即返回输出。