• Publicidad

Manejo de Comandos Net::Telnet con Switch Juniper

¿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.

Manejo de Comandos Net::Telnet con Switch Juniper

Notapor jero2528 » 2014-08-21 17:35 @774

Buenas tardes, amigos.

Nuevamente en líos. para resumir este es el trozo de código que estoy tratando de ejecutar:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. @out = $conn1[1]->cmd( String => "set system login user jero uid 21152\n", Timeout => 120 );
  2. foreach $line1 (@out) {
  3.     $salida .= "$line1<br>";
  4.     print "-*-*-> $line1\n\n";
  5.     sleep(4);
  6. }
  7.  
  8. #@out=$conn1[1]->waitfor ('/#/');
  9. @out = $conn1[1]->cmd( String => "set system login user jero class mycl-wheel\n", Timeout => 300 );
  10. foreach $line1 (@out) {
  11.     $salida .= "$line1<br>";
  12.     print "-*-*->> $line1\n\n";
  13.     sleep(4);
  14. }
  15. @out = $conn1[1]->waitfor('/#/');
  16. @out = $conn1[1]
  17.     ->cmd( String => "set system login user ebackups authentication encrypted-password xxxxxx \n", Timeout => 300 );
  18. foreach $line1 (@out) {
  19.     $salida .= "$line1<br>";
  20.     print "-*-*->>> $line1\n\n";
  21.     sleep(4);
  22.     if ( $line1 =~ m/.+?syntax.+?error/isg ) {
  23.         print "comando -> set system login user ebackups authentication encrypted-password xxxxxxxxx\n";
  24.     }
  25. }
  26.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Básicamente estoy tratando de crear un usuario en el equipo. Ya he probado manualmente y funciona sin inconvenientes hacer esto paso a paso. El problema está en mi script: no sé cómo hacerlo. Por favor, ¿me pueden ayudar?

Esta es la salida:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. [root@mi-server scripts]# /home/jero/scripts_pruebas/enable_juniper_script.pl
  2. 493, CHILE, JUNOS20x1, 200.8.8.2, Juniper, Router
  3. -*-*->
  4.  
  5.  
  6. -*-*-> {master}[edit]
  7.  
  8.  
  9. -*-*-> jero@JUNOS20x1#
  10.  
  11.  
  12. -*-*->
  13.  
  14.  
  15. -*-*-> {master}[edit]
  16.  
  17.  
  18. -*-*-> jero@JUNOS20x1
  19.  
  20. -*-*->>
  21.  
  22.  
  23. -*-*->> {master}[edit]
  24.  
  25.  
  26. -*-*->> jero@JUNOS20x1#
  27.  
  28.  
  29. -*-*->>
  30.  
  31.  
  32. -*-*->> {master}[edit]
  33.  
  34.  
  35. -*-*->> jero@JUNOS20x1
  36.  
  37. -*-*->>>                                                      ^
  38.  
  39.  
  40. -*-*->>> syntax error.
  41.  
  42.  
  43. jero@JUNOS20x1# ...on encrypted-password xxxxxxxxx
  44.  
  45.  
  46. -*-*->>>                                                      ^
  47.  
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4



Es la forma en que decidí depurar de cierto modo, pero en donde me dice el error de sintaxis es donde tengo dudas porque no me muestra nada, y como dije antes lo he probado manualmente y el comando ejecuta sin problemas. Muchas gracias de antemano por sus opiniones :)


Saludos,



Jero2528
Última edición por explorer el 2020-10-17 12:26 @560, editado 2 veces en total
Razón: Formateado de código con Perltidy
Saludos,

Jero2528
Avatar de Usuario
jero2528
Perlero nuevo
Perlero nuevo
 
Mensajes: 50
Registrado: 2014-05-14 15:43 @697
Ubicación: Bogota, Colombia

Publicidad

Re: Manejo de Comandos Net::Telnet con Switch Juniper

Notapor explorer » 2014-08-21 19:46 @865

Por favor, quita la opción '/g' de la expresión regular que está en el if(), porque seguro que no es lo que quieres hacer con esa expresión regular.

Luego, el error de sintaxis es lo que devuelve el intercambiador, queriendo decir que es la sintaxis del comando la que está mal.
Y con el carácter '^' te está diciendo dónde:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. set system login user ebackups authentication encrypted-password xxxxxx
  2.                                                                    ^
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Lo más seguro es que la contraseña contenga algún carácter extraño.

Prueba a cambiar las líneas String, de

String => "set system login user ebackups authentication encrypted-password xxxxxx \n"

a

String => 'set system login user ebackups authentication encrypted-password xxxxxx' . "\n"

Recuerda que las comillas dobles, en Perl, implican interpolación del contenido, así que si en la contraseña hay "algo" que se asemeje a una variable, pues Perl la interpolará.
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

Re: Manejo de Comandos Net::Telnet con Switch Juniper

Notapor jero2528 » 2014-08-22 08:43 @404

Hola, explorer.

Gracias por tu ayuda, ya probé lo que me indicaste pero sigue sucediendo lo mismo. Sí es el password: tiene un signo '$', y por cierto, estaba indicando el password como variable inicialmente y luego textualmente y no funciona, el problema puede que se arregle cambiando el password pero dada la situación no lo puedo cambiar ya que tendría que hacerlo en muchísimos equipos y para ello debo configurar ciertas configuraciones adicionales, pero bueno, mi pregunta ahora es ¿por qué cuando ingreso al equipo (yo como usuario) y ejecuto los comandos del script lo hace sin problemas? :shock: No logro ver qué sucede "por debajo" cuando lo hace el script :(

Adicional a esto cambié la expresión regular pero tampoco está entrando al if() :( es decir, reemplacé la opción /isg por solamente /is.


Saludos,



Jero2528
Saludos,

Jero2528
Avatar de Usuario
jero2528
Perlero nuevo
Perlero nuevo
 
Mensajes: 50
Registrado: 2014-05-14 15:43 @697
Ubicación: Bogota, Colombia

Re: Manejo de Comandos Net::Telnet con Switch Juniper

Notapor explorer » 2014-08-22 12:18 @554

Cambia la expresión regular por
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if ( $line1 =~ m/syntax\s+error/i ) {
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


En cuanto a la contraseña, si contiene caracteres extraños, lo mejor es usar comillas simples:

my $passwd = 'contraseña$$&%$&%$%&$@@@@@@@___--___gdsjfhsdgf';

y luego ya puedes ponerla con el resto del comando, con entrecomillado doble:

String => "set system login user ebackups authentication encrypted-password $passwd \n"

De esta manera, la interpolación solo se hace con las comillas dobles: la variable $passwd se interpola (convierte) a su contenido literal, sin que afecten los caracteres extraños.

Hay una excepción a la regla del entrecomillado simple: la presencia del carácter '\' o la combinación '\\', que pueden requerir un trato más especial, como se comenta en la sección Constructores de valores escalares:

Los literales de cadena se suelen delimitar con comillas simples o dobles. Estas comillas funcionan de forma muy parecida a las comillas en las shell estándar de Unix: los literales de cadena entre comillas dobles están sujetos al uso de la barra diagonal inversa y la sustitución de variables; en cambio, las cadenas entre comillas simples no lo están (a excepción de \' y \\). Se aplican las reglas normales de barra diagonal inversa estilo C para crear caracteres como el salto de línea, tabulaciones, etc., y algunas formas más exóticas. Encontrará una lista en la sección "Comillas y operadores de comillas" de perlop.
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


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado