foreach (@{$servers}) { my $server = $_; $logger->debug("Connecting to remote server \"$server\" through ssh2."); if (!$ssh2->connect($server)) { $logger->error("Connecting to remote server: \"$server\" failed."); my ($code, $error_name, $error_string) = $ssh2->error(); print "ERRORS: $code - $error_name - $error_string\n"; exit; } $logger->debug("Authenticating on server $server."); if (!$ssh2->auth_publickey($self->getUsername(), $self->getPublicKeyPath(), $self->getPrivateKeyPath())) { $logger->error("Authentication failed for username " . $self->getUsername() . " Maybe no public keys were set up on the remote host ($server). Check the authorized_keys."); exit; } my $pos = 0; foreach (@{$commands}) { my $chan = $ssh2->channel(); $logger->debug("Executing \"$_\" on $server."); $chan->exec($_); my $status = $chan->exit_status(); if (!$status) { while (my $len = $chan->read(my $buff, 1024)) { $result{$server}[$pos] .= $buff; if ($len < 1024) { last; } } } else { $logger->debug("\"$_\" execution failed."); $result{$server}[$pos] = undef; } if (!$chan->close()) { $logger->error("Closing channel to remote server: \"$server\" failed."); exit; } $pos++; # Incrementing the position on the array. } $logger->debug("Disconnecting from remote server \"$server\" through ssh2."); if (!$ssh2->disconnect()) { $logger->error("Disconnecting to remote server: \"$server\" failed."); exit; }