Pregunta

necesito para automatizar iniciar sesión en una sesión Telnet mediante espero , pero tengo que cuidar de múltiples contraseñas para el mismo nombre de usuario.

Aquí está el flujo Necesito crear:

  1. Abrir sesión TELNET a una IP
  2. Enviar user-name
  3. Enviar contraseña
  4. Contraseña incorrecta? Enviar el mismo nombre de usuario nuevo, entonces una contraseña diferente
  5. Debe haber iniciado la sesión en el éxito en este punto ...

Por lo que vale, esto es lo que tengo hasta ahora:

#!/usr/bin/expect
spawn telnet 192.168.40.100
expect "login:"
send "spongebob\r"
expect "password:"
send "squarepants\r"
expect "login incorrect" {
  expect "login:"
  send "spongebob\r"
  expect "password:"
  send "rhombuspants\r"
}
expect "prompt\>" {
  send_user "success!\r"
}
send "blah...blah...blah\r"

Huelga decir que esto no funciona, y tampoco se ve muy bonito. De mis aventuras con Google esperar parece ser algo de un arte oscuro. Gracias de antemano a cualquier persona para la asistencia en la materia!

Otros consejos

Con un poco de golpear he encontrado una solución. Resulta que esperar utiliza una sintaxis TCL que no estoy del todo familiarizado con:

#!/usr/bin/expect
set pass(0) "squarepants"
set pass(1) "rhombuspants"
set pass(2) "trapezoidpants"
set count 0
set prompt "> "
spawn telnet 192.168.40.100
expect {
  "$prompt" {
    send_user "successfully logged in!\r"
  }
  "password:" {
    send "$pass($count)\r"
    exp_continue
  }
  "login incorrect" {
    incr count
    exp_continue
  }
  "username:" {
    send "spongebob\r"
    exp_continue
  }
}
send "command1\r"
expect "$prompt"
send "command2\r"
expect "$prompt"
send "exit\r"
expect eof
exit

Esperamos que esto sea útil para otros.

Si conoce los identificadores de usuario y contraseñas, entonces también debería saber qué ID de usuario / contraseña pares están alineados con los cuales los sistemas. Creo que sería mejor mantener un mapa de los cuales ID de usuario / contraseña par va con qué sistema extrayendo después de que la información y simplemente utilizar la correcta.

Por lo tanto - ya que, obviamente, no le gusta mi consejo, entonces le sugiero que busque en el Wikipedia e implementar un procedimiento que devuelve 0 si tiene éxito y 1 si los tiempos de expectativa a cabo. Eso le permitirá detectar cuando la contraseña suministrada no - los tiempos de expectativas inmediatas a cabo - y vuelva a intentar. Si esto es útil, puede retirar la downvote ahora que he editado a él.

En retrospectiva, lo que probablemente quiere hacer esto en conjunto con el mapa de todos modos ya que querrías para detectar un inicio de sesión fallido si se cambió la contraseña.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top