【问题标题】:PHP execute SSH2 commandPHP执行SSH2命令
【发布时间】:2020-07-25 11:54:43
【问题描述】:

我在使用 PHP SSH2 命令时遇到了一些问题。 所以我已经成功地将我的专用服务器与我的应用程序连接起来,但我不知道如何使用它运行命令。 当我写类似

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

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

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

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

【问题讨论】:

    标签: php ssh phpseclib


    【解决方案1】:

    您有多种选择。

    • 使用$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");
      

      在您的第一个代码 sn-p 中,您附加了 \n,但您并没有在这些行中这样做。您需要这样做,因为当您在交互式 shell 中时,shell 知道您已完成输入命令的方式是因为您按下了 enter 按钮。这就是 Linux 知道您已完成输入并准备好运行命令的方式。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-25
      • 2019-08-01
      • 1970-01-01
      • 2014-01-21
      • 1970-01-01
      • 1970-01-01
      • 2013-05-25
      • 2019-10-26
      相关资源
      最近更新 更多