Bien le bonjour l'assemblée.
Double question/problématique en vue de corriger un bug dans une sonde. Dans cette feature la sonde est censé afficher la liste des tunnels SSH.
- Pourquoi le script suivant fonctionne-t-il avec php-cli mais pas avec php-fpm ? Peut-on corriger cela et si oui comment ?
<?php
echo listSSHTunnel();
function listSSHTunnel(){
// work with cli, not with fpm
return exec("ps -aux | grep '[s]sh.*:.*:' | grep -Eo ' [\.0-9a-Z]{1,}:[\.0-9a-Z]{1,}:[\.0-9a-Z]{1,} ' | sed 's# ##g' | sort | uniq | sed ':a;N;$!ba;s#\\n#--#g'");
}
?>
Fonctionne (affiche par exemple 666:127.0.0.1:666) :
sudo -u www-data php -f ./test.php
Ne fonctionne pas (page blanche et erreur dans les logs indiquant que sed et grep n'ont rien reçu provenant de la commande de départ):
wget https://helloworld/test.php
- Seconde question : Comment récupérer le destinataire de chaque tunnel SSH ? (qu'il soit IP ou nom de domaine)
# exec
Posté par GG (site web personnel) . Évalué à 3. Dernière modification le 20 janvier 2020 à 17:31.
Parce que ta configuration php-fpm interdit exec.
C'est une bonne chose.
Pourquoi bloquer la publicité et les traqueurs : https://greboca.com/Pourquoi-bloquer-la-publicite-et-les-traqueurs.html
[^] # Re: exec
Posté par voxdemonix . Évalué à 1. Dernière modification le 20 janvier 2020 à 17:45.
Ca ne vient point de là, les autres fonctions n'ont pas de soucis. (mais aucune n'utilise ps -aux)
[^] # Re: exec
Posté par GG (site web personnel) . Évalué à 4. Dernière modification le 20 janvier 2020 à 19:17.
Essaye de faire plusieurs exec, chacune avec une seule commande, pour voir celle qui ne passe.
Pourquoi bloquer la publicité et les traqueurs : https://greboca.com/Pourquoi-bloquer-la-publicite-et-les-traqueurs.html
[^] # Re: exec
Posté par voxdemonix . Évalué à 2. Dernière modification le 21 janvier 2020 à 01:12.
Sage conseil, c'était le second grep (à mon avis le \ qui n'est pas apprécié par l'interpreteur de php).
Les deux problématiques sont résolues en convertissant la majeure partie en PHP, il ne me manque qu'une regex :
Si quelqu'un aurait une regex plus solide pour capturer tout hostname (word, ipv4, ipv6) afin de remplacer
[a-z0-9.]{1,}
dans cette regex'/@[a-z0-9.]{1,}(:[0-9]{1,}){0,1}/i'
Exemple de ligne (on cherche a capturer @8.8.8.8:666 ici, mais les ports peuvent ne pas être indiqué). Avec ou sans le @ (je n'arrive pas a l'utiliser comme "balise" sans le capturer mais ce n'est pas bloquant).
La regex actuelle n'est pas terrible mais fonctionne avec les hostnames.
[^] # Re: exec
Posté par voxdemonix . Évalué à 1.
Compatible avec php preg_match
# Question existentielle
Posté par voxdemonix . Évalué à 1.
Je teste mon script en créant deux tunnels SSH depuis le même user. Si je tape la commande bash suivante, je les vois bien tout deux.
Mais si je teste la commande via PHP (via le script suivant), je n'en vois qu'un. Pourquoi ?
[^] # Re: Question existentielle
Posté par voxdemonix . Évalué à 2. Dernière modification le 21 janvier 2020 à 18:54.
Réponse => supprimer les new lines avant que la string n'arrive a PHP.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.