thanks for the help.
it works.

On 14 February 2018 at 13:33, Илья Рассадин <elcaml...@gmail.com> wrote:

> Try to look at Net::SSH::Any https://metacpan.org/pod/Net::SSH::Any
>
>
> On 2/14/18 5:32 AM, Lancelot Mak wrote:
>
> do u have any recommendation on module to use? what i wanted is to login
> ssh using username,password but in script
> no key, no non-interactive
>
> thanks
>
> On 13 February 2018 at 23:38, Chas. Owens <chas.ow...@gmail.com> wrote:
>
>> On Tue, Feb 13, 2018 at 1:19 AM Lancelot Mak <lancelot....@computer.org>
>> wrote:
>>
>>> #!/usr/bin/perl -W
>>>
>>> use SSH::Command;
>>>
>>> $cmdln = `grep $ARGV[0] list.txt`;
>>> chomp($cmdln);
>>> ($cmdhost,$user,$pass) = split(':',$cmdln);
>>> $p = `echo $pass|base64 -d`;
>>> chomp($p);
>>>
>>> $cmdlog = ssh_execute(
>>> host => $cmdhost,
>>> username => $user,
>>>
>> password => $p,, i
>>>
>> command => "$ARGV[1]",
>>> );
>>>
>>>
>>> print $cmdlog;
>>>
>>> print "\n";
>>>
>>
>> Testing on a Mac OS machine, the I found it consistently prints out 8192
>> characters.  This should be immediately recognizable as a magic number (8k
>> or 2**13).  This tells me that SSH::Command (or the underlying libssh2
>> library) has an 8k buffer and once it is full, it no longer returns any
>> data.  Looking at the code for SSH::Command, I see the following
>> function:
>>
>> # Execute command and get answer as text
>> sub execute_command_and_get_answer {
>>     my ($ssh2, $command) = @_;
>>
>>     my $chan = $ssh2->channel();
>>
>>     $chan->exec($command);
>>     $chan->read(my $result, 102400);
>>     chomp $result; # remove \n on string tail
>>
>>     return $result;
>> }
>>
>> This looks like a fixed read (albeit a longer one that I expected, so
>> there is probably a fixed buffer in libssh2 too), so that is likely the
>> problem.  Changing the function to read until an end of file is detected:
>>
>> sub execute_command_and_get_answer {
>>     my ($ssh2, $command) = @_;
>>
>>     my $chan = $ssh2->channel();
>>
>>     $chan->exec($command);
>>
>>     my $result = "";
>>     until ($chan->eof) {
>>         $chan->read(my $buf, 4_096);
>>         $result .= $buf;
>>     }
>>     chomp $result; # remove \n on string tail
>>
>>     return $result;
>> }
>>
>> seems to fix the problem.  I am filling a bug against the module, but
>> given that the last release was in 2009 and the most current version is
>> less than 1.0 (0.7), you may want to find a different module to use.
>>
>>
>>
>
>
> --
> Lancelot Mak
> ----------------------------------------------------------------
> http://facebook.com/honey.mak
> Used to compete
> Lord to complete
> 從前輸贏在心頭
> 如今一切在主手
> Amen
>
>


-- 
Lancelot Mak
----------------------------------------------------------------
http://facebook.com/honey.mak
Used to compete
Lord to complete
從前輸贏在心頭
如今一切在主手
Amen

Reply via email to