in reply to Re: Net::OpenSSH multiple commands
in thread Net::OpenSSH multiple commands

The line ...
my ($pty,$pid) = $ssh->open2pty or die "unable to run remote command show ip arp";
... does mostly nothing, delete it.
This code, however, gives me 2 errors

Those are probably harmless, generated by OpenSSH because you are requesting a remote pty but attaching it to a non-pty stream.

BTW, when writing follow ups to previous comments, do not reply to main question but to those, otherwise the person you are responding (i.e. me) will probably miss the reply.

Replies are listed 'Best First'.
Re^3: Net::OpenSSH multiple commands
by mlebel (Hermit) on Apr 24, 2012 at 11:32 UTC

    I removed the line:(for which I just realized that I had forgot to change "show ip arp")

    my ($pty,$pid) = $ssh->open2pty or die "unable to run remote command show ip arp";

    and the results were that the "channel 4: open failed: resource shortage:" error went away. As for the remaining error, I guess i'll just filter it out since it's probably harmless as you said.

    I appreciate the tip on writing follow ups, I never realized that it could cause that. Now I have a much more solid solution compared to using the Net::SSH::Expect module. For those interested, I cleaned up my code:...

    #!/usr/bin/perl use strict; use warnings; use Net::OpenSSH; my $host = '10.0.0.1'; my $ssh = Net::OpenSSH->new("$host", timeout => 30); $ssh->error and die "unable to connect to remote host: ". $ssh->error; my $output = $ssh->capture({stdin_data => "term length 0\nterm width 512\nsh ver\nsh run\nexit\n"}); print $output;

    Thank you Salva

Re^3: Net::OpenSSH multiple commands
by mlebel (Hermit) on Apr 24, 2012 at 19:10 UTC

    Hi Salva, I believe you are probably the best person to answer this:... I changed the line:

    my $output = $ssh->capture({stdin_data => "term length 0\nterm width 512\nsh ver\nsh run\nexit\n"});

    to this:

    my @Output = $SSH->capture({stdin_data => "terminal length 0\nterminal width 512\nshow ip accounting\nexit\n"});

    and I get an error (I think might be caused by openssh) that says "Bad packet length 688328622." (The length numbers change every time I run the code). If i remove some parts of the commands such as "terminal length 0" and run it again, the error goes away. The same goes if I leave "terminal length 0" in there and replace say "show ip accounting" by "show ip route".(no error)

    So it seems that a combination of commands will trigger this error. I do have to say though that the output is ok regardless of the error. Would this be another error which I should Ignore? or could this be a bug?

    Thanks

      This looks like a bug on the router SSH stack. Try to replicate it running the following command from the command line in order to discard Perl or Net::OpenSSH as the cause of the problem.
      ssh router <<EOC terminal length 0 terminal width 512 show ip accounting exit EOC

      I guess the malfunction is caused by some buffer overflow on the remote shell that is triggered by the longer command line.