Posts with tag « SSH2 Channel » 1 posts

Posted on by

0 comment

Une extension PHP nommé ssh2, que l'on peut retrouver dans le dépôt pecl permet de se connecter à un serveur SSH depuis un script PHP à l'aide de plusieurs fonctions. Plus particulièrement, la fonction ssh2_shell qui retourne un flux de données, ou stream, nous permet de mettre en place entre le script PHP et le serveur SSH un vrai échange complet. L'intérêt d'avoir un flux de données pour converser avec un serveur SSH est que l'on peut manipuler assez facilement à l'aide de toutes les fonctions stream_* ces flux. Ça, c'est la théorie.

En pratique, il s'avère que l'utilisation d'un flux SSH2 Channel (retourné par ssh2_shell) avec la fonction stream_select qui permet d'attendre que le flux "change" - c'est-à-dire qu'une donnée arrive - est impossible. En effet, pour utiliser le flux avec stream_select, il faut pouvoir transformer ce flux en une donnée utilisable par la fonction C select(). C'est ce que l'on appelle "caster un stream" en franglais et "to cast a stream" en anglais. Le problème, c'est que la librairie pecl/ssh2 (basée sur libssh2) n'implémente pas cette fonctionnalité, ce qui nous donne droit à un magnifique:

Warning: stream_select() [function.stream-select]: cannot represent a stream of type SSH2 Channel as a select()able descriptor in /path/to/file.php on line XX

Nous allons donc voir comment ajouter cette fonctionnalité simplement, à l'aide de patchs développés par mes soins.

View more →