Exemples d'Utilisation avec Expect
Exemple #1 Exemple d'Utilisation avec Expect
<?php ini_set("expect.loguser", "Off"); $stream = fopen("expect://ssh root@remotehost uptime", "r"); $cases = array ( array (0 => "password:", 1 => PASSWORD) ); switch (expect_expectl ($stream, $cases)) { case PASSWORD: fwrite ($stream, "password\n"); break; default: die ("Une erreur s'est produite lors de la connexion à l'hôte distant !\n"); } while ($line = fgets($stream)) { print $line; } fclose ($stream); ?>
L'exemple suivant permet de se connecter à un hôte distant, détermine si le système d'exploitation distant est 32 ou 64 bits, puis, effectue une mise à jour d'un paquet spécifique.
Exemple #2 Autre exemple d'utilisation d'Expect
<?php ini_set("expect.timeout", -1); ini_set("expect.loguser", "Off"); $stream = expect_popen("ssh root@remotehost"); while (true) { switch (expect_expectl ($stream, array ( array ("password:", PASSWORD), // SSH demande un mot de passe array ("yes/no)?", YESNO), // SSH demande si l'on souhaite stocker l'hôte array ("~$ ", SHELL, EXP_EXACT), // Nous avons récupéré un shell ! ))) { case PASSWORD: fwrite ($stream, "secret\n"); break; case YESNO: fwrite ($stream, "yes\n"); break; case SHELL: fwrite ($stream, "uname -a\n"); while (true) { switch (expect_expectl ($stream, array ( array ("~$ ", SHELL, EXP_EXACT), // Nous sommes dans le shell! array ("^Linux.*$", UNAME, EXP_REGEXP), // Affichage de la commande uname -a ), $match)) { case UNAME: $uname .= $match[0]; break; case SHELL: // Exécution de la mise à jour : if (strstr ($uname, "x86_64")) { fwrite ($stream, "rpm -Uhv http://mirrorsite/somepath/some_64bit.rpm\n"); } else { fwrite ($stream, "rpm -Uhv http://mirrorsite/somepath/some_32bit.rpm\n"); } fwrite ($stream, "exit\n"); break 2; case EXP_TIMEOUT: case EXP_EOF: break 2; default: die ("Une erreur est survenue !\n"); } } break 2; case EXP_TIMEOUT: case EXP_EOF: break 2; default: die ("Une erreur est survenue !\n"); } } fclose ($stream); ?>