Примеры использования Expect

Пример #1 Пример использования Expect

В этом примере мы соединимся с удаленным хостом по SSH, и напечатаем время непрерываной работы сервера.

<?php
ini_set
("expect.loguser""Off");

$stream fopen("expect://ssh root@remotehost uptime""r");

$cases = array (
    array (
=> "password:"=> PASSWORD)
);

switch (
expect_expectl ($stream$cases)) {
    case 
PASSWORD:
        
fwrite ($stream"password\n");
        break;
 
    default:
        die (
"Ошибка соединения с удаленным сервером!\n");
}

while (
$line fgets($stream)) {
      print 
$line;
}
fclose ($stream);
?>

В следующем примере мы соединимся с удаленным сервером, узнаем разрядность его операционной системы и запустим обновления указанного пакета.

Пример #2 Еще один пример использования 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 запрашивает пароль
            
array ("yes/no)?"YESNO), // SSH спрашивает, сохранять ли запись хоста
            
array ("~$ "SHELLEXP_EXACT), // Мы получили доступ к коммандной оболочке!
    
))) {
        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 (
"~$ "SHELLEXP_EXACT), // Мы получили доступ к коммандной оболочке!
                            
array ("^Linux.*$"UNAMEEXP_REGEXP), // вывод uname -a
                    
), $match)) {
                        case 
UNAME:
                            
$uname .= $match[0];
                            break;

                        case 
SHELL:
                            
// Run update:
                            
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 (
"Случилась ошибка!\n");
                    }
            }
            break 
2;

        case 
EXP_TIMEOUT:
        case 
EXP_EOF:
            break 
2;

        default:
            die (
"Случилась ошибка!\n");
    }
}

fclose ($stream);
?>