嘿,我正在尝试使用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);
答案 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");