2016-08-12 1 views
1

Hey j'essaie d'utiliser les fonctions PHP SSH2 dont j'ai utilisé une classe sur un GitHub: Here mais ne semble pas fonctionner comme prévu.SSH ne fonctionne pas correctement via PHP exec

Je suis en train de cd dans un répertoire et ensuite la liste des fichiers, mais semble ignorer l'cd et quand j'utilise la commande ls il ne fait qu'afficher le répertoire racine.

est ici quand je joue un ls normale sur mon répertoire racine:

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 

Et voici alors j'essaye d'accéder au myOtherDirectory en utilisant SSH via PHP

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

Qu'est-ce ' myOtherDirectory'? Lorsque vous vous connectez en tant que root, vous serez dans le répertoire '/ root', vous devrez donc indiquer le chemin absolu tel que/myOtherDirectory ou// path/to/myOtherDirectory' – AbraCadaver

+0

' echo $ ssh ("cd myOtherDirectory"); 'pour voir si elle renvoie une erreur. – AbraCadaver

+0

@AbraCadaver il renvoie une réponse vide – Curtis

Répondre

3

Le protocole SSH vous permet de faire une connexion SSH (appelée session) vers un hôte distant, puis exécutez plusieurs canaux via la connexion unique. Un seul canal peut représenter une session interactive, un seul transfert SFTP, etc. Chaque canal est indépendant des autres. Ce que vous faites ici est de créer une seule session SSH sur l'hôte distant, puis de créer deux canaux. Le premier canal exécute cd, puis quitte. Le deuxième canal exécute ls, puis quitte. Les deux canaux étant indépendants l'un de l'autre, l'appel cd n'a aucun effet sur le répertoire de travail de l'appel ls.

Vous souhaitez exécuter les deux commandes en une seule session. En supposant que le système distant utilise bash ou une coque similaire à exécuter des commandes, cela devrait fonctionner:

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

Alternativement, vous pouvez spécifier le répertoire distant correct dans la commande ls:

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

Vous êtes un génie, vous avez sauvé la journée! – Curtis