2010-11-08 5 views
2

J'ai un shell shellscript avec une connexion à une autre machine avec ssh et une clé de sorte qu'il n'a pas besoin du nom d'utilisateur et mot de passe. Lorsque j'exécute ce script à partir de la ligne de commande, cela fonctionne très bien ... mais quand je lance ce script depuis php shell_exec, cela ne fonctionne pas.PHP shell_exec exécutant un shellscript avec ssh

Si je crée une connexion ssh avec PHP et exécute le script en tant que mon propre utilisateur, cela fonctionne.

Maintenant pour ma question: D Existe-t-il un moyen de simplement exécuter le script dans shell_exec de php sans faire une connexion sur ssh en tant qu'utilisateur différent?

+1

C'est une description assez pauvre de votre scénario. Quoi qu'il en soit, êtes-vous sûr que la ligne de commande et le PHP utilisent le même utilisateur, c'est-à-dire que vous exécutez PHP depuis la ligne de commande et non depuis un serveur web? – AndreKR

+0

Cela ressemble plus à une question sysadmin. Si l'utilisateur PHP s'exécute sous a le droit d'exécuter le programme en question, c'est possible. Sinon, ce n'est pas possible. –

+0

Php fonctionne comme www-data et quand je me connecte à ssh sous php je me connecte sous mon propre compte utilisateur donc définitivement pas le même utilisateur. Là où ça va mal est dans le shellscript ... ssh -n $ KEYFILE $ USER @ $ HOST "bash ./jpg2xml.sh/tmp/$ tmpfile | ./ocr" qui est exécuté à partir du shellscript par php. Il exécute le script, seulement cette partie qui ne fonctionne pas! – Chris

Répondre

1

Avez-vous spécifié le fichier de clé privée correctement?

+0

Arrr vous avez raison monsieur bien .. si je change le propriétaire à www-data cela fonctionne .. il était pas lisible pour apache. – Chris

0

Si vous utilisez Ubuntu ou Debian, le serveur Web fonctionne sous le nom d'utilisateur www-data. Pour les autres systèmes, vérifiez la configuration du serveur Web pour le nom d'utilisateur. Vous pouvez simplement tester si cet utilisateur (et votre application Web php) est capable de faire la connexion SSH.

1) Devenez l'utilisateur de votre serveur web

sudo su www-data 

2) Essayez de connecter l'hôte distant

ssh [email protected] 

Si vous obtenez connecté sans entrer un mot de passe, il doit être un problème différent. Si vous devez entrer un mot de passe, les fichiers de clés ont été stockés pour un utilisateur différent - pas pour www-data. Vous avez déjà configuré SSH pour utiliser la clé. Faites de même pour votre utilisateur local www-data et cela fonctionnera.

+0

Mais je me connecte dans le shellscript en tant qu'utilisateur différent puis www-data donc en théorie ça ne devrait pas faire de différence non? ssh -o StrictHostKeyChecking = non -n -i $ KEYFILE $ USER @ $ HÔTE – Chris

0

Il semble que la connexion ssh ne fonctionne pas avec shell_exec. Si je cours le shellscript sous ssh2_exec cela semble fonctionner.

Ce qui est un peu étrange que la connexion ssh est effectuée dans le fichier de script avec une clé publique et privée .. Je suppose que ce serait juste courir: s

Le serveur Web est autorisé à exécuter le fichier, comme il y a d'autres commandes là-bas qui fonctionnent comme prévu.

Questions connexes