Estoy tratando de hacer que mi guión esperado sea más robusto y poder manejar más situaciones para estar más automatizado. Actualmente, mi secuencia de comandos funciona bien, sin embargo, hay momentos en los que se me pedirá que agregue las claves RSA a hosts_conocidos, quiero que esto sea sí por defecto todo el tiempo. Mi servidor no siempre solicita las claves, una vez agregadas, luego de un tiempo no preguntará hasta que elimine las claves o cambie las puertas de enlace. Después de buscar en línea, intenté agregar esto (código comentado) en mi código de trabajo y luego agregué que se detiene en la pantalla de ingreso de contraseña si la clave RSA ya se había agregado.
Entonces, mi pregunta es, ¿hay alguna manera de manejar esta situación, digamos que si ya se agregó RSA, simplemente saltará a la línea de contraseña?
[user@gateway my_direcotry]$ cat loadItTest #!/usr/bin/expect -f set timeout 600 set user root set host 1.1.1.1 set pass pass spawn ssh $user@$host #expect { # -re "RSA key fingerprint" {send "yes\r"} #} expect "assword:" send "$pass\r" expect "#"Salida de muestra:
[root@gateway my_direcotry]# loadItTest spawn ssh root@1.1.1.1 root@1.1.1.1's password:Aquí es donde entra en juego el comando exp_continue , para crear esencialmente un "bucle" dentro del comando expect :
spawn ssh $user@$host expect { "RSA key fingerprint" {send "yes\r"; exp_continue} "assword:" {send "$pass\r"} } expect "#"Si ve el patrón "clave RSA", responda "sí" , pero luego siga esperando el patrón "contraseña" . Si no ve "contraseña" antes de "clave RSA", está bien.
El cuerpo del patrón "contraseña" no contiene exp_continue . Después de enviar la contraseña, el comando expect adjunto regresará y el siguiente comando es esperar su aviso.
Tenga en cuenta que eliminé la opción -re : no hay caracteres especiales de expresiones regulares en ese patrón.