在测试了几个用PERL发送SSH命令的模块之后,我选择 Net :: SSH :: Expect 模块(能够为唯一连接发送多个命令)
我还在测试一些函数,这是我的代码:
use Net::SSH::Expect;
my $user="myuser";
my $host = "126.30.186.249";
my $passwd = "mypasswd";
my $ssh = Net::SSH::Expect->new(host => "$host", password=> "$passwd", user => "$user", raw_pty => 1 );
my $login_output = $ssh->login();
$ssh->send("sh arp");
my $line ;
while ( defined ($line = $ssh->read_line()) ) {
print $line . "\n" ;
}
以下是我的问题:使用“ exec ”功能代替“发送”时:
sh arp
Protocol Address Age (min) Hardware Addr Type Interface
Internet 126.30.186.3 112 0080.9f8b.fc1a ARPA GigabitEthernet0/1.186
Internet 126.30.186.6 163 0080.9f8b.fc1a ARPA GigabitEthernet0/1.186
Internet 126.30.186.247 - e4c7.2291.5181 ARPA GigabitEthernet0/1.186
Internet 126.30.186.248 33 885a.9291.c7e1 ARPA GigabitEthernet0/1.186
Internet 126.30.186.249 - 0000.0c07.ac65 ARPA GigabitEthernet0/1.186
Internet 126.30.186.250 - 0000.0c07.ac66 ARPA GigabitEthernet0/1.186
Internet 126.30.187.241 38 0017.e05d.b144 ARPA GigabitEthernet0/1.230
Internet 126.30.187.242 96 0012.dada.65c1 ARPA GigabitEthernet0/1.230
Internet 126.30.187.243 96 f025.7275.63c1 ARPA GigabitEthernet0/1.230
Internet 126.30.187.250 - 0000.0c07.ac00 ARPA GigabitEthernet0/1.230
Internet 126.30.187.251 - e4c7.2291.5181 ARPA GigabitEthernet0/1.230
**--More--**
此“更多”提示是一个问题。 所以你可以看到,我尝试了“发送”并做了一个while循环。给出的结果是相同的,但没有--More--提示。 我需要跳过“more”提示并查看所有结果。 Net :: OpenSSH在发送“捕获”时给了我所有的结果。 我搜索任何功能自动跳过“更多”提示...但不是结果:( 谁可以帮我这个事 ?感谢。
答案 0 :(得分:0)
添加
my $out2 = $ssh->exec ("term le 0");
在执行任何命令之前正在运行。这允许通过SSH连接模拟的终端不限制行缓冲区 使用Cisco / Hp材料。我不知道它是否在为其他任何人工作。