03
février
Faire du SSH via PHP
, dans la catégorie GNU/Linux, Développement | aucun commentaire | Mots clés : ssh, php
Dans le cadre d'un développement Web, vous avez besoin de vous connecter et de réaliser certaines actions sur un autre serveur. L'ennui, c'est que ce serveur est accessible uniquement en SSH.
Pas de problème, on peut faire du SSH en PHP ! Avec la librairie PHP "SSH2", on va se connecter à un serveur, envoyer des commandes SSH, et même afficher ce qu'il nous renvoie ! Installez 3 paquets, et relancez le serveur Apache :
apt-get install libssh2-1 libssh2-1-dev libssh2-php /etc/init.d/apache2 reload
Pour tester que SSH2 est bien installé, faites un php -m |grep ssh2. Si la console vous affiche bien "SSH2", c'est que la librairie est bien installée !
Le code PHP :
Voici une fonction PHP vous permettant d'envoyer une commande SSH :
function ssh($host, $login, $mdp, $command)
{
if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist");
if(!($con = ssh2_connect($host, 22))){
echo "échec connexion\n";
} else {
if(!ssh2_auth_password($con, $login, $mdp)) {
echo "échec authentification\n";
} else {
// execute a command
if (!($stream = ssh2_exec($con, $command ))) {
echo "échec de l'exécution de la commande\n";
} else {
// collect returning data from command
stream_set_blocking($stream, true);
$data = "";
while ($buf = fread($stream,4096)) {
$data .= $buf;
}
fclose($stream);
return $data;
}
}
}
}
Elle s'utilise comme cela :
$command = 'ls -alh /tmp';
$ret = ssh('monserveur', 'utilisateur', 'monmotdepassesecurise', $command);
echo '<pre>' . $ret . '</pre>';
Utilisez la variable $ret pour afficher ce que renvoie la commande SSH :) .
Si vous souhaitez passer plusieurs commandes dans la même instance SSH, utilisez le ";" comme séparateur. Les commandes seront alors exécutées à la suite :
ls -alh /tmp/; touch /tmp/truc
