AnyEvent-SSH2
view release on metacpan or search on metacpan
lib/AnyEvent/SSH2.pm view on Meta::CPAN
$cv->send('efd');
delete $ssh->{watcher}{$id}{efd}
};
}
# åè¿ç¨
$c->check_window;
if ($c->delete_if_full_closed) {
defined $c->{cb} ? $c->{cb}->() : '';
$cmgr->remove($c->{id});
}
}
# è¿æ¯ä¸»è¿æ¥ç奿
my $handle = $ssh->{session}{sock};
$handle->push_read( chunk => 4 => sub {
my ($handle, $buf) = @_;
if (!length($buf)) {
croak "Connection failed: $!\n";
}
$ssh->break_client_loop if length($buf) == 0;
($buf) = $buf =~ /(.*)/s; ## Untaint data. Anything allowed.
$ssh->incoming_data->append($buf);
$cv->send('main');
});
}
sub channel_mgr {
my $ssh = shift;
unless (defined $ssh->{channel_mgr}) {
$ssh->{channel_mgr} = Net::SSH::Perl::ChannelMgr->new($ssh);
}
$ssh->{channel_mgr};
}
sub _read_version {
my $ssh = shift;
my $line = shift;;
my $len = length $line;
unless(defined($len)) {
next if $! == EAGAIN || $! == EWOULDBLOCK;
croak "Read from socket failed: $!";
}
croak "Connection closed by remote host" if $len == 0;
croak "Version line too long: $line"
if substr($line, 0, 4) eq "SSH-" and length($line) > 255;
croak "Pre-version line too long: $line" if length($line) > 4*1024;
if (substr($line, 0, 4) ne "SSH-") {
$ssh->debug("Remote version string: $line");
}
return $line;
}
sub sock { $_[0]->{session}{sock} }
1;
__END__
=pod
=encoding utf8
=head1 NAME
AnyEvent::SSH2 - åºäº AnyEvent ç SSH2 çéé»å¡äºä»¶é©±å¨çå®ç°
=head1 SYNOPSIS
对å¤å°ä¸»æº, å¹¶è¡çè¿ç¨æ§è¡ä¸äºå½ä»¤.
use AE;
use AnyEvent::SSH2;
my $ssh1 = AnyEvent::SSH2->new(
'ip',
user => 'root',
pass => 'pass',
);
my $ssh2 = AnyEvent::SSH2->new(
'ip'
user => 'root',
pass => 'pass',
);
my $cv = AE::cv;
$cv->begin;
$ssh1->send('sleep 5;hostname' => sub {
my ($ssh, $stdout, $stderr) = @_;
print "$stdout";
$cv->end;
})->connect;
$cv->begin;
$ssh2->send('sleep 1;hostname' => sub {
my ($ssh, $stdout, $stderr) = @_;
print "$stdout";
$cv->end;
})->connect;
$cv->recv;
对åä¸ä¸ªä¸»æº, å¹¶è¡çæ§è¡å¤æ¡å½ä»¤...注æé¡ºåºå¹¶ä¸åºå®, ä»»ä½ä¸ä¸ªå½ä»¤å
æ§è¡å®é½ä¼å
åè°.
use AnyEvent::SSH2;
my $ssh = AnyEvent::SSH2->new(
'ip'
user => 'root',
pass => 'pass',
);
my $cv = AE::cv;
$cv->begin;
$ssh->send('sleep 5; echo 5' => sub {
my ($ssh, $stdout, $stderr) = @_;
print "$stdout";
$cv->end;
});
( run in 4.520 seconds using v1.01-cache-2.11-cpan-e93a5daba3e )