【问题标题】:phpseclib SSH - Change directory and run script?phpseclib SSH - 更改目录并运行脚本?
【发布时间】:2017-04-14 19:18:32
【问题描述】:

我在 /home/pi/mydir 中有要执行的脚本,所以我需要做的第一件事是

$ssh->exec('cd mydir');

然后

$ssh->exec('./script');

但它不起作用,所以任何人都可以帮助我吗?

【问题讨论】:

  • 可能您的网络服务器没有执行该脚本的权限。
  • 我用的是xampp,需要什么权限?

标签: php ssh phpseclib


【解决方案1】:

使用\n:

$ssh->exec("cd mydir\n./script");

或者创建一个文件script.sh(示例)并以UNIX格式保存:

cd mydir
./script

然后执行这个脚本:

$script = file_get_contents("script.sh");
$ssh->exec($script);

【讨论】:

    【解决方案2】:
    cd /path/to/directory && your command
    

    我的临时解决方案!

    【讨论】:

      【解决方案3】:

      这是 exec() 工作方式的一个基本限制。 exec() 有点像……你打开 PuTTY,输入cd mydir,重新启动 PuTTY,然后输入./script。如果你做了所有这些,你不会期望“./script”在“mydir”中运行。然而,这几乎就是 exec() 所做的。

      在这种情况下,这不是 phpseclib 问题 - 更多的是 SSH 问题。 exec(),由 SSH 规范定义,只是不支持。

      更多信息:

      http://phpseclib.sourceforge.net/ssh/examples.html#chdir

      我的建议:要么使用绝对路径,要么使用 read() / write()。

      祝你好运!

      【讨论】:

      • 好的,我尝试使用读写,它工作正常,但是当我尝试运行程序/脚本(./video 示例/测试)脚本工作 1 秒后出现问题熄灭。有什么解决办法吗?
      • 日志可能会提供一些见解。您可以通过在文件顶部执行 define('NET_SSH2_LOGGING', 2); 并在最后调用 echo '<pre>' . $ssh->getLog() . '</pre>' 来获取它们。获得日志后,发布它们,我们可以看到我们看到的内容。
      • 好的,我通过不杀死进程来解决我的问题,所以这不是 phpseclib 问题。无论如何感谢您的帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-03
      • 2015-05-29
      • 1970-01-01
      • 2013-09-25
      • 2011-05-02
      相关资源
      最近更新 更多