Página 1 de 2

Problemas con Net::SSH::Perl

NotaPublicado: 2010-01-19 16:02 @709
por aiske_26
Hola, necesito ayuda. Tengo un código el cual se conecta vía ssh a una lista de equipos, pero si por algún motivo no puede conectarse el código no sigue a los otros equipos, sino que se cuelga y no continua, ¿qué puedo hacer? Tengo tiempo con esto y no he logrado solventarlo... si puedes ayudarme, gracias de antemano... Mi código es el siguiente:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
($user) = ('usuario');
$pass   = 'pas';
$ssh    = Net::SSH::Perl->new($host);

$ssh->login($user, $pass);
if (! $ssh ) {
    $status_backup = 'ERROR';
    $detalle = 'Problema de Conectividad SSH';
    $cantidad_equipos_errores ++;
}
else {
    open (SECOUT,">&STDOUT");
    open (STDOUT,">>$nombre_archivo");
    ($stdout, $stderr, $exit) = ('' , '', '');
    ($user) = ('usuario');
    $pass = 'pas';

    $ssh = Net::SSH::Perl->new($host,debug=>0);
    $ssh->login($user, $pass);

    $count_connect_sshv1 = 0;
    while ($count_connect_sshv1 < $cantidad_comandos) {
        ($nombre_archivo, $stderr, $exit) =
            $ssh->cmd($comandos[$count_connect_sshv1]);
        print "(($comandos[$count_connect_sshv1]))\n$nombre_archivo";
        $count_connect_sshv1 ++;
    }
    close (SECOUT);
}
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Mi código se conecta vía ssh al equipo, y ejecuto una lista de ciertos comandos y la salida lo mando para un archivo...

Re: problemas con Net::SSH::Perl;

NotaPublicado: 2010-01-19 16:17 @720
por explorer
Bienvenido a los foros de Perl en Español, aiske_26.

¿Qué error da? ¿En qué línea se bloquea? ¿Sale el mensaje ERROR?

Lo que muestras no es el código completo. Hay muchas variables con valores que no conocemos.

Si es largo, quítale las partes que sabes que funcionan, y publica todo lo demás. Si hay información sensible (nombres de usuario, contraseñas y ordenadores), falséalos.

Re: problemas con Net::SSH::Perl;

NotaPublicado: 2010-01-25 15:08 @672
por aiske_26
Gracias por la bienvenida...

El detalle es que no me da errores, solo que si no se puede conectar vía SSH no hace nada y se sale... no sé si hay una función que me determine que se haya realizado la sesión bien. Pensé que con este código
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$ssh = Net::SSH::Perl->new($host);

$ssh->login($user, $pass);
if (! $ssh ) {

}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Podría verificar si se inició sesión o no, pero no me resulta...

Re: problemas con Net::SSH::Perl;

NotaPublicado: 2010-01-25 15:52 @703
por explorer
Modifica la línea

$ssh = Net::SSH::Perl->new($host);

por

$ssh = Net::SSH::Perl->new($host, debug => 1);

y así saldrá información en pantalla. Prueba y nos cuentas.

Re: problemas con Net::SSH::Perl;

NotaPublicado: 2010-01-25 16:01 @709
por aiske_26
Ya lo había probado y me da el detalle de cómo va la conexión, pero al no poder conectarse por cualquier cosa se sale... Yo por mi parte tengo otro código que es para vía telnet que para verificar la conexión telnet realizo lo siguiente:

$session = new Net::Telnet (Host => $host,Input_log => $nombre_archivo, Timeout => 1200, Errmode => "return");

y me funciona al no establecerse la conexión; algo así necesito pero vía SSH.

Re: Problemas con Net::SSH::Perl

NotaPublicado: 2010-01-25 16:19 @721
por explorer
Ejecuta $ssh->sock(); después de hacer la conexión. Si no devuelve nada, es que no se hizo la conexión.

Re: Problemas con Net::SSH::Perl

NotaPublicado: 2010-01-25 16:52 @744
por aiske_26
Hice de la siguiente manera:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
($user) = ('usuario');
$pass   = 'pas';
$ssh    = Net::SSH::Perl->new($host);
$ssh->sock();
if (! $ssh )
{
    $ssh->login($user, $pass);
    $status_backup = 'ERROR';
    $detalle = 'Problema de Conectividad SSH';
    $cantidad_equipos_errores ++;
}
else {
    open (SECOUT,">&STDOUT");
    open (STDOUT,">>$nombre_archivo");
    ($stdout, $stderr, $exit) = ('' , '', '');
    ($user) = ('usuario');
    $pass = 'pas';

    $ssh = Net::SSH::Perl->new($host,debug=>0);
    $ssh->login($user, $pass);

    $count_connect_sshv1 = 0;
    while ($count_connect_sshv1 < $cantidad_comandos) {
        ($nombre_archivo, $stderr, $exit) =
            $ssh->cmd($comandos[$count_connect_sshv1]);
        print "(($comandos[$count_connect_sshv1]))\n$nombre_archivo";
        $count_connect_sshv1 ++;
    }
    close (SECOUT);
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Y pues nada, ahora me sale esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Can't connect to 10.120.X.X, port 22: Connection refused at /usr/lib/perl5/site_perl/5.8.8/Net/SSH/Perl.pm line 204, <GEN37> line 1.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Re: Problemas con Net::SSH::Perl

NotaPublicado: 2010-01-25 19:30 @854
por explorer
No, no lo estás haciendo como te digo.

Lo que te he dicho es que hagas, por ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
if ($ssh->sock()) {
    # sí se hizo la conexión
}
else {
    print "Error en la conexión con $host\n";
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Y otra cosa es el mensaje de error, que ya da una pista: se conecta al servidor pero la conexión es rechazada en el mismo puerto 22.

¿Seguro que puedes entrar en esa máquina con el nombre de usuario y contraseña desde la línea de órdenes?

Re: Problemas con Net::SSH::Perl

NotaPublicado: 2010-01-26 07:17 @345
por salva
aiske_26 escribiste:Problemas con Net::SSH::Perl...

Aunque ésta no sea probablemente la causa de tus problemas, debes saber que Net::SSH::Perl está prácticamente abandonado y tiene muchos bugs que nadie piensa corregir.

Hoy en día hay alternativas mucho mejores como Net::SSH2 o Net::OpenSSH... yo personalmente y con gran parcialidad te recomiendo este último :mrgreen:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use Net::OpenSSH;
for my $host (@hosts) {
  my $ssh = Net::OpenSSH->new($host, user => $user, passwd => $passwd);
  if ($ssh->error) {
    warn "imposible conectar con servidor remoto $host: ". $ssh->error;
    next;
  }
  my ($out, $err) = $ssh->capture2($cmd);
  print "----- $host -----\noutput:\n$out\nerror:\n$err\n";
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Re: Problemas con Net::SSH::Perl

NotaPublicado: 2010-01-26 16:19 @721
por aiske_26
Buenas... realicé el $ssh->sock() como me indicaste y nada...

Estoy probando con Net::OpenSSH y se muestra esto
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
WARNING: RSA1 key found for host 200.44.x.x
in /root/.ssh/known_hosts:7
RSA1 key fingerprint e3:6f:80:e6:97:1a:09:41:b2:cf:ae:ac:39:ad:ba:4c.
imposible conectar con servidor remoto 200.44.x.x: unable to establish master SSH connection: the authenticity of the target host can't be established, try loging manually first at funciones_backup.pl line 518.
Exiting subroutine via next at funciones_backup.pl line 519.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4