©
本文档使用 PHP中文网手册 发布
Example #1 Expect Usage Example
This example connects to the remote host via SSH, and prints the remote uptime.
<?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 ( "Error was occurred while connecting to the remote host!\n" );
}
while ( $line = fgets ( $stream )) {
print $line ;
}
fclose ( $stream );
?>
The following example connects to the remote host, determines whether installed OS is for 32 or 64 bit, then runs update for specific package.
Example #2 Another Expect Usage Example
<?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 is asking for password
array ( "yes/no)?" , YESNO ), // SSH is asking whether to store the host entry
array ( "~$ " , SHELL , EXP_EXACT ), // We've got the 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 ), // We've got the shell!
array ( "^Linux.*$" , UNAME , EXP_REGEXP ), // uname -a output
), $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 ( "Error has occurred!\n" );
}
}
break 2 ;
case EXP_TIMEOUT :
case EXP_EOF :
break 2 ;
default:
die ( "Error has occurred!\n" );
}
}
fclose ( $stream );
?>
[#1] David dkxl [2012-12-28 18:30:28]
If using the examples with telnet instead of ssh, note that telnet may need \r (Carriage Return) instead of \n (New Line)