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