【发布时间】:2017-04-14 19:18:32
【问题描述】:
我在 /home/pi/mydir 中有要执行的脚本,所以我需要做的第一件事是
$ssh->exec('cd mydir');
然后
$ssh->exec('./script');
但它不起作用,所以任何人都可以帮助我吗?
【问题讨论】:
-
可能您的网络服务器没有执行该脚本的权限。
-
我用的是xampp,需要什么权限?
我在 /home/pi/mydir 中有要执行的脚本,所以我需要做的第一件事是
$ssh->exec('cd mydir');
然后
$ssh->exec('./script');
但它不起作用,所以任何人都可以帮助我吗?
【问题讨论】:
使用\n:
$ssh->exec("cd mydir\n./script");
或者创建一个文件script.sh(示例)并以UNIX格式保存:
cd mydir
./script
然后执行这个脚本:
$script = file_get_contents("script.sh");
$ssh->exec($script);
【讨论】:
cd /path/to/directory && your command
我的临时解决方案!
【讨论】:
这是 exec() 工作方式的一个基本限制。 exec() 有点像……你打开 PuTTY,输入cd mydir,重新启动 PuTTY,然后输入./script。如果你做了所有这些,你不会期望“./script”在“mydir”中运行。然而,这几乎就是 exec() 所做的。
在这种情况下,这不是 phpseclib 问题 - 更多的是 SSH 问题。 exec(),由 SSH 规范定义,只是不支持。
更多信息:
http://phpseclib.sourceforge.net/ssh/examples.html#chdir
我的建议:要么使用绝对路径,要么使用 read() / write()。
祝你好运!
【讨论】:
define('NET_SSH2_LOGGING', 2); 并在最后调用 echo '<pre>' . $ssh->getLog() . '</pre>' 来获取它们。获得日志后,发布它们,我们可以看到我们看到的内容。