• Publicidad

Conectividad SSH a varios Host

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Conectividad SSH a varios Host

Notapor situ » 2007-07-14 07:41 @362

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:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/bin/perl
use Net::SSH qw(ssh);


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

ssh("$user\@$host", "$cmd");
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


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
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Publicidad

Notapor explorer » 2007-07-14 08:01 @376

¿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.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor situ » 2007-07-14 08:12 @383

Tengo el siguiente código.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/bin/perl
use Net::SSH qw(ssh);
my $user = 'situ';
my $cmd = "ls";
open (DATOS,"ips.lst");
while (@linea = <DATOS>){
    ssh("$user\@linea", "$cmd");
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


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.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Notapor explorer » 2007-07-14 09:39 @444

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:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/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;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor situ » 2007-07-15 00:16 @053

Gracias, anda de 10.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Notapor situ » 2007-07-15 00:57 @081

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


Gracias.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Notapor explorer » 2007-07-15 04:34 @232

Creo que para eso tienes que usar sshopen2(). En el manual hay un ejemplo.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor situ » 2007-07-15 18:51 @827

Explorer,
Desde ya muchas gracias por tu respuesta.
Estoy buscando y la verdad que no encuentro el ejemplo que nombras :S
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Notapor explorer » 2007-07-15 19:13 @842

JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor situ » 2007-07-16 13:41 @612

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

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
 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);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



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

Saludos
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Siguiente

Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados