Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Conectividad SSH a varios Host
Ir a página 1, 2  Siguiente
 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio
Mensaje Sab Jul 14, 2007 6:41 am
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 149
Conectividad SSH a varios Host Responder citando

Estoy tratando de hacer un script el cual por el momento me presente en pantalla la salida del comando "ls".

Lo hice para un solo Host:

Perl:
#!/bin/perl
use Net::SSH qw(ssh);


my $user = 'operador';
my $host = 'localhost';
my $cmd = "ls";

ssh("$user\@$host", "$cmd");


Y me anda perfecto. Ahora me gustaría hacerlo pero para que lea un archivo el cual contiene las ips de las pcs y me vaya mostrando el "ls" de cada una, el tema que no sé cómo hacer porque estoy probando con matrices y me tira un error a la hora de juntar las @.

Se alguien me puede ayudar, se lo voy a agradecer
Mensaje Sab Jul 14, 2007 7:01 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4232
Ubicación: Valladolid, España
Responder citando

¿Y dónde está el código que falla? ¿en qué línea? ¿qué error sale?

La solución parece que es abrir el fichero y hacer un bucle por cada línea leída, quitar el retorno de carro del final de la línea, ejecutar el ssh y repetir hasta el final.
Mensaje Sab Jul 14, 2007 7:12 am
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 149
Responder citando

Tengo el siguiente código.
Perl:
#!/bin/perl
use Net::SSH qw(ssh);
my $user = 'situ';
my $cmd = "ls";
open (DATOS,"ips.lst");
while (@linea = <DATOS>){
    ssh("$user\@linea", "$cmd");
}


Y este error:
ssh: linea: Name or service not known

Seguramente debe ser fácil arreglarlo, pero como todavía soy novato en este tema no me estoy dando cuenta cómo hacerlo.
Desde ya gracias por ayudarme.
Mensaje Sab Jul 14, 2007 8:39 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4232
Ubicación: Valladolid, España
Responder citando

El problema está en el modo de leer el fichero.

En el bucle while tienes puesto @linea = <DATOS> que quiere decir que del fichero DATOS se lean TODAS las líneas y se almacenen en el array @linea. Como es de suponer que el fichero no está vacío, esa operación, además, devuelve un valor de verdedaro al while, pero sólo una vez, ya que el fichero ha sido leído en su totalidad y no hay más qué leer.

Al llegar a la línea del ssh, pones ssh("$user\@linea", "$cmd"); que quiere decir que se abra una conexión SSH a situ@linea, y claro, en ese momento salta el error porque ssh no sabe quien es el host 'linea'.

Prueba con esto:
Perl:
#!/bin/perl
use Net::SSH qw(ssh);
my $user = 'situ';
my $cmd = "ls";
open(DATOS,"ips.lst");
while($linea = <DATOS>) {
    chomp($linea);
    ssh("$user\@$linea", $cmd);
}
close DATOS;
Los cambios son:
* hemos pasado de usar una variable array @linea a una variable escalar $linea, por lo que DATOS guardará allí una línea cada vez, hasta que llegue el final de fichero y le devuelva un falso al while
* con chomp() quitamos el carácter fin de línea a $linea (no nos hace falta para el comando ssh, incluso puede molestarnos)
* en la función ssh, usamos la variable $linea para indicar el host. Además, quitamos las comillas a $cmd porque no son necesarias (sólo está esa variable dentro de ellas).
Mensaje Sab Jul 14, 2007 11:16 pm
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 149
Responder citando

Gracias, anda de 10.
Mensaje Sab Jul 14, 2007 11:57 pm
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 149
Responder citando

Molesto nuevamente, para consultar si me podrías ayudar para guarda la salida del comando en un archivo.
Con el siguiente formato:
Código:
IP
salida del comando


Gracias.
Mensaje Dom Jul 15, 2007 3:34 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4232
Ubicación: Valladolid, España
Responder citando

Creo que para eso tienes que usar sshopen2(). En el manual hay un ejemplo.
Mensaje Dom Jul 15, 2007 5:51 pm
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 149
Responder citando

Explorer,
Desde ya muchas gracias por tu respuesta.
Estoy buscando y la verdad que no encuentro el ejemplo que nombras :S
Mensaje Dom Jul 15, 2007 6:13 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4232
Ubicación: Valladolid, España
Responder citando

http://search.cpan.org/~ivan/Net-SSH-0.08/SSH.pm#EXAMPLE
Mensaje Lun Jul 16, 2007 12:41 pm
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 149
Responder citando

Mira hice el siguiente script basándome en el ejemplo y me funcionó pero no creo que este 100% correcto en su armado.

Perl:
use Net::SSH qw(sshopen2);
  use strict;
 my $user = "operador";
  my $host = "localhost";
  my $cmd = "ls";

  sshopen2("$user\@$host", *READER, *WRITER, "$cmd") || die "ssh: $!";
 while (<READER>) {
open(LECTURA,">> hola.txt") || die "No pudo crearse: $!";
print LECTURA "$_";
  }

 
close(READER);



Si saco el *WRITER del parámetro no me anda el script.

Saludos
Mensaje Lun Jul 16, 2007 1:12 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4232
Ubicación: Valladolid, España
Responder citando

Es que *WRITER es el handle del fichero de salida. sshopen2 necesita al menos un fichero de salida para sacar los mensajes.
Mensaje Lun Jul 16, 2007 5:53 pm
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 149
Responder citando

¿Digamos que ese código no esta mal, entonces? Aunque tenga información que no voy usar.
Mensaje Lun Jul 16, 2007 6:06 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4232
Ubicación: Valladolid, España
Responder citando

Yo lo que haría, en caso de que no me interesase para nada los mensajes de salida, sería abrir el fichero nulo (/dev/null) con un open WRITER,...

Aunque quizás hay otras formas... que ahora mismo no recuerdo... a ver si otro perlero se acuerda.
Mensaje Lun Jul 16, 2007 6:12 pm
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 149
Responder citando

Gracias, voy a probarlo y a poner el codigo ya que siempre es util tener codigos de referencia
Mensaje Lun Jul 16, 2007 6:24 pm
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 149
Responder citando

Bueno, acá les dejo el script terminado.

Perl:
use Net::SSH qw(sshopen2);
  use strict;
 my $user = "operador";
  my $host = "localhost";
  my $cmd = "ls";

  sshopen2("$user\@$host", *WRITER, *READER, "$cmd") || die "ssh: $!";
 while (<WRITER>) {
open(LECTURA,">> hola.txt") || die "No pudo crearse: $!";
print LECTURA "$_";
  }

 while (<READER>) {
open(ESCRITURA,"> /dev/null") || die "No pudo crearse: $!";
print ESCRITURA "$_";
  }
 
close(READER);
close(WRITER);



Explorer, si tenes unos minutos, fíjate si está bien toda la sintaxis.

Gracias
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio Todas las horas son GMT - 6 Horas
Ir a página 1, 2  Siguiente
Página 1 de 2



Powered by phpBB © 2001, 2005 phpBB Group