http://www.perlmonks.org?node_id=1047190

Andy16 has asked for the wisdom of the Perl Monks concerning the following question:

Hi Monks - hi Salva (I guess / hope ... :->)

another issue I'm facing:
some of the devices I'm connecting to via OpenSSH do
reqire a "\n" at the end of the command to execute -
some dont't. Is there a way of harmonizing that?

And: for some devices/commands OpenSSH does not realize
end of output and get's stuck in reading.
is there an EXPECT waiting for a prompt that differs in
that case or how is EOF detected.

thanks a lot - again!
  • Comment on Net::OpenSSH - line breaks and "End of Output"

Replies are listed 'Best First'.
Re: Net::OpenSSH - line breaks and "End of Output"
by salva (Canon) on Jul 31, 2013 at 08:33 UTC
    Can you show us the specific code you are using to run the remote commands?

    EOF handling is part of the SSH protocol. There is not any special sequence or prompt to detect when a command is done.

    Also, again, enable debugging on the module and show us the output.

      Hi Salva,

      the call is a standard one like:
      @cmdout = $ssh->capture({timeout => 30}, "show version");

      I did send a long run of that by PM - for security reasons.
      I'll post all results of the discussion here asap!

      thanks for that perfect support!!!
        received from Salva:
        The SSH server running on those routers does not follow the standard. Read the entry "Connecting to switches, routers, etc." from the module + FAQ (https://metacpan.org/module/Net::OpenSSH#FAQ) for an explanatio +n of what is going wrong. A workaround may be to add a "quit" or "exit" command to explicitly en +d the session. For instance: @output = $ssh->capture("$cmd\nexit\n"); if that doesn't work, try this: @output = $ssh->capture({stdin_data => "$cmd\nexit\n"}); otherwise you will have to use Expect to wait for the session prompt, +send the command, get the output until you get the prompt again and c +lose the connection.



        funny:
        my @cmdout = $ssh->capture({timeout => $sshtimeout, stdin_data => "\n"}, $sshcmd."\n");

        seems to do my job....
        :-)
        going on testing ....