http://qs321.pair.com?node_id=11102345


in reply to Command sent via Net::Telnet is not getting logged in CentOS. However, the same is getting logged in Fedora 20

From the difference in dumps provided, it's pretty clear the command isn't getting echoed back so the first place I'd look is Net::Telnet->cmd_remove_mode(). While this may (or may not) be needed on one system (i.e., Fedora) it may (or may not) be needed on another (i.e., CentOS). I've seen quirks on Cisco routers where different modes / prompts need to be set to let Net::Telnet::Cisco work with them.

  • Comment on Re: Command sent via Net::Telnet is not getting logged in CentOS. However, the same is getting logged in Fedora 20

Replies are listed 'Best First'.
Re^2: Command sent via Net::Telnet is not getting logged in CentOS. However, the same is getting logged in Fedora 20
by shoundic (Novice) on Jul 04, 2019 at 06:05 UTC
    You're right. command_remove_mode does have an impact. For instance on CentOS at the time of initialization Net::Telnet object, if I'm setting cmd_remove_mode as 0, then I'm able to get command output without command. Here are the logs for the same
    my $ssh = new Net::Telnet ( -fhopen => $pty, -prompt => $args{prompt}, -telnetmode => 0, -cmd_remove_mode => 1, -timeout => SSH_TIMEOUT, -output_record_separator => "\r", #-errmode => sub { print "Telnet FAIL\n"; } ); Output of script execution [root@hyd1658 attribute_template]# perl test_centos.pl output is Thu Jul 4 11:18:18 IST 2019 [root@hyd1658 ~]
    However, if I set cmd_remove_mode as 1 then the output is getting choped. Here are the logs-
    my $ssh = new Net::Telnet ( -fhopen => $pty, -prompt => $args{prompt}, -telnetmode => 0, -cmd_remove_mode => 1, -timeout => SSH_TIMEOUT, -output_record_separator => "\r", #-errmode => sub { print "Telnet FAIL\n"; } ); Output of script execution [root@hyd1658 attribute_template]# perl test_centos.pl output is [root@hyd1658 ~]
    This(chopping of 1 line of output) does make sense from the following piece of code of Net::Telnet
    sub cmd { . . . ## Determine if we should remove the first line of output based ## on the assumption that it's an echoed back command. if ($cmd_remove_mode eq "auto") { ## See if remote side told us they'd echo. $telopt_echo = $self->option_state(&TELOPT_ECHO); $remove_echo = $telopt_echo->{remote_enabled}; } else { # user explicitly told us how many lines to remove. $remove_echo = $cmd_remove_mode; } ## Get rid of possible echo back command. while ($remove_echo--) { shift @$output; } . . .
    But in either case, the command sent should have been echoed in the output, which in this case is not happening. Do you have any suggestion on what could be its root cause or what piece of code is responsible for this.