SSH无法通过PHP exec正常工作

时间:2016-08-12 17:07:07

标签: php ssh

嘿,我正在尝试使用PHP SSH2函数,我在GitHub上使用了一个类:Here但似乎没有按预期工作。

我正在尝试将cd放入目录然后列出文件,但似乎忽略了cd,当我使用ls命令时,它只显示根目录。< / p>

这是我在根目录上执行正常ls的时候:

drwx------  6 root root 4096 Aug 12 18:23 .
drwxr-xr-x 22 root root 4096 Aug 11 08:28 ..
-rw-------  1 root root 2963 Aug 12 18:33 .bash_history
-rw-r--r--  1 root root 3106 Oct 22  2015 .bashrc
drwx------  3 root root 4096 Aug 11 21:05 .cache
drwxr-xr-x  3 root root 4096 Aug 12 18:21 .local
drwxr-xr-x  2 root root 4096 Aug 12 18:22 .nano
drwxr-xr-x 18 root root 4096 Aug 11 21:07 myOtherDirectory
-rw-r--r--  1 root root  148 Aug 17  2015 .profile
-rw-------  1 root root 1024 Aug 12 18:27 .rnd
-rw-r--r--  1 root root  252 Aug 12 18:28 .wget-hsts

然后我尝试使用SSH通过PHP访问myOtherDirectory

$ssh = new ssh("ip", "root", "pass");
$ssh("cd myOtherDirectory");
$result = $ssh("ls -la");
print_r($result);

1 个答案:

答案 0 :(得分:3)

SSH协议允许您与远程主机建立一个SSH连接(称为会话),然后通过单个连接运行多个通道。单个通道可以表示交互式会话,单个SFTP传输等。每个频道都独立于其他频道。

$ssh = new ssh("ip", "root", "pass");
$ssh("cd myOtherDirectory");
$result = $ssh("ls -la");

您在这里做的是创建一个到远程主机的SSH会话,然后创建两个通道。第一个频道运行cd,然后退出。第二个频道运行ls然后退出。这两个通道彼此独立,因此cd调用对ls调用的工作目录没有影响。

您希望在单个会话中运行这两个命令。假设远程系统使用bash或类似的shell来运行命令,这应该可以工作:

$ssh = new ssh("ip", "root", "pass");
$result = $ssh("cd myOtherDirectory && ls -la");

或者,您可以在ls命令中指定正确的远程目录:

$ssh = new ssh("ip", "root", "pass");
$result = $ssh("ls -la myOtherDirectory");