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