Agradeceríamos tu ayuda para compartir nuestras secciones referente a las ciencias informáticas.
Solución:
Mezclar Bash y Expect no es una buena manera de lograr el efecto deseado. Intentaría usar solo Expect:
#!/usr/bin/expect
eval spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no [email protected]$myhost.example.com
# Use the correct prompt
set prompt ":|#|\$"
interact -o -nobuffer -re $prompt return
send "my_passwordr"
interact -o -nobuffer -re $prompt return
send "my_command1r"
interact -o -nobuffer -re $prompt return
send "my_command2r"
interact
La solución de muestra para bash podría ser:
#!/bin/bash
/usr/bin/expect -c 'expect "n" eval spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no [email protected]$myhost.example.com; interact '
esto va a esperar Ingresar y luego regrese (por un momento) a la sesión interactiva.
La forma más fácil es usar sshpass. Esto está disponible en los repositorios de Ubuntu/Debian y no tiene que lidiar con la integración de expect con Bash.
Un ejemplo:
sshpass -p ssh
sshpass -ptest1324 ssh [email protected] ls -l /tmp
El comando anterior se puede integrar fácilmente con un script Bash.
Nota: Por favor, lea el Consideraciones de Seguridad sección en man sshpass
para una comprensión completa de las implicaciones de seguridad.
Agregue el comando Expect ‘interactuar’ justo antes de su EOD:
#!/bin/bash
read -s PWD
/usr/bin/expect <[email protected]$myhost.example.com
expect "password"
send "$PWDn"
interact
EOD
echo "you're out"
Esto debería permitirle interactuar con la máquina remota hasta que cierre la sesión. Entonces estarás de vuelta en Bash.