2016-08-12 2 views
1

Эй, я пытаюсь использовать функции PHP SSH2, из которых я использовал класс из-за GitHub: Here, но, похоже, не работает должным образом.SSH не работает корректно с помощью PHP exec

Я пытаюсь cd в каталог, а затем список файлов, но, кажется, игнорирую cd и, когда я использую команду ls он просто отображает корневую директорию.

Вот когда я выполняю нормальную 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 

И вот тогда я пытаюсь получить доступ к myOtherDirectory с помощью SSH с помощью PHP

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

Что такое ' myOtherDirectory'? Когда вы входите в систему под root, вы попадете в директорию '/ root', поэтому вам нужно будет указать абсолютный путь, например'/myOtherDirectory' или '/ path/to/myOtherDirectory' – AbraCadaver

+0

' echo $ ssh ("cd myOtherDirectory"); 'чтобы увидеть, возвращает ли она ошибку. – AbraCadaver

+0

@AbraCadaver возвращает пустой ответ – Curtis

ответ

3

Протокол SSH позволяет вам сделать одно SSH-соединение (называемое сеансом ) на удаленный хост, а затем запуск нескольких каналов через одно соединение. Один канал может представлять собой интерактивный сеанс, единую передачу SFTP и т. Д. Каждый канал не зависит от других.

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

Что вы здесь делаете, это создание единого сеанса SSH для удаленного хоста, а затем создание двух каналов. Первый канал запускает cd, а затем выходит. Второй канал работает ls, а затем выходит. Эти два канала не зависят друг от друга, поэтому вызов cd не влияет на рабочий каталог вызова ls.

Вы хотите запустить обе команды за один сеанс. Предполагая, что удаленная система использует bash или аналогичную оболочку для выполнения команд, это должно работать:

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

В качестве альтернативы, вы можете указать правильный удаленный каталог в ls команды:

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

Вы гений, вы спасли день! – Curtis