Net::SSH::Expect.pm
new():
以哈希的方式指定参数:
'host'=>
'user' =>
'password' =>
'port' =>
'raw_pty'=> 创建pty
1. login()
返回所有的结果;可以根据返回结果判断是否登陆成功;
2.send() 发送命令,命令输出结果会保存在缓存中;
3.before() 返回后上一次匹配的结果
5.after() 返回剩余的所有数据
6.peek(0) 返回当前缓存里面所有没有移除的信息,不会删除数据;
参数为等待的时间 , 一般是0;
7.eat(string) 可以做清空 输入缓存用; 删除输入缓存中相应的字符串
example :eat(peek(0));;
8.read_all()
读取并移除所有的输出;
9.has_line 判断缓存区是否还有数据;如果有返回1 没有返回0
10.read_line 读取并移除一行输出;
11.exec (cmd) 执行一个命令 并返回所有的输出结果;
12.get_expect 用来管理ssh链接,如果存在这个链接,就返回这个链接,不存在报错
13.waitfor(prompt,timeout) ;当输出和prompt匹配时,返回1,如果不匹配直到超时并返回0,匹配到的数据用before返回。
常用方法演示:
#!/usr/bin/perl
use strict;
use Net::SSH::Expect;
my $ssh ;
my $line;
eval {
$ssh = new Net::SSH::Expect (
'host' => '127.0.0.1',
'user' =>'root',
'password' => '1qazXSW@',
'port' => 22,
'timeout' =>1,
'raw_pty' => 1);
if ($ssh->login() =~ /Password/i){
print "password is wrong !\n";
exit -1;
}
};
$ssh->send("cat /home/xing/all_bak/y.txt\n");
$ssh->waitfor ('[\$%#>]\s*(\\033\[0m)?$') ? print "waitfor Ok\n" : die "waitfor failed";
print "peek : ".$ssh->peek(0) ."\n";
$line = $ssh->before();
print "before : $line \n";
$ssh->send("cat /home/xing/all_bak/y.txt\n");
#$ssh->waitfor ('[\$%#>]\s*(\\033\[0m)?$') ? print "waitfor Ok\n" : die "waitfor failed";
print "read_all : \n";
print $ssh->read_all() ."\n";
print "read_all over \n";
$ssh->send("cat /home/xing/all_bak/y.txt\n");
#$ssh->waitfor ('[\$%#>]\s*(\\033\[0m)?$') ? print "waitfor Ok\n" : die "waitfor failed";
print "eat test: --------------------------------\n";
$ssh->eat($ssh->peek(0));
print $ssh->peek(0) ."\n";
print $ssh->read_all() ."\n";
print "eat test over ----------------------------\n";
$ssh->send("cat /home/xing/all_bak/y.txt\n");
#$ssh->waitfor ('[\$%#>]\s*(\\033\[0m)?$') ? print "waitfor Ok\n" : die "waitfor failed";
print "after ; ---------------------------------\n";
$ssh->read_line();
$ssh->read_line();
print $ssh->after() ."\n";
print "after over -----------------------------\n";
$ssh->close();