El siguiente ejemplo es un SCRIPT realizado con EXPECT para tomarlo como base para ejecutar script remotos y mostrar el resultado por pantalla. Suponiendo que al script lo grabamos con el nombre remoto.sh, para ejecutarlo sería :
bash remoto.sh «ps -fea | grep componente»
!/bin/bash
HOST="servidor"
USER="usuario"
PASS="password"
CMD=$@
VAR=$(expect -c "
spawn ssh -o StrictHostKeyChecking=no $USER@$HOST $CMD
match_max 100000
expect \"?assword:\"
send -- \"$PASS\r\"
send -- \"\r\"
expect eof
")
echo "==============="
echo "$VAR"
Entre las comillas se debe ingresar el comando que se desee ejecutar en el servidor remoto.-
Excelente reseña funciona perfecto lo utilice para realizar monitoreo sobre equipos.
asi es funciona excelente.
Hola, buen aporte, yo utilice tu shell pero para conectarme a un SFTP, pero no logro ejecutar el comando get para copiar los archivos del servidor remoto a mi servidor local, ¿me pudieras hacer favor de indicarme como se puede hacer?, ya intente de varias formas, pero no lo he logrado. Si se conecta al server remoto.
VAR=$(expect -c »
spawn sftp -o «BatchMode=no» $USER@$HOST «:/ruta/»
expect -nocase \»?assword:\»
send — \»$PASS\r\»
send — \»get archivo.txt\r\»
send — \»\r\»
expect eof
«)
echo «===============»
echo «$VAR»
Saludos.
Puedes probar poniendo la ruta completa del comando Get.
Necesitas indicarle en el expect que prompt aparece cuando envias el password,
asi lo probe y funciono, tambien le quite la opcion “BatchMode=no” porque si espera un usuario y password
spawn sftp $USER@$HOST
match_max 100000
expect \»?assword:\»
send — \»$PASS\r\»
expect \»sftp>\» <—el expect espera este prompt y luego envia el get
send — \"get archivo.txt\r\"
#send — \"\r\"
expect eof
")
echo "==============="
echo "$VAR"
Necesitas indicarle en el expect que prompt aparece cuando envias el password,
asi lo probe y funciono, tambien le quite la opcion “BatchMode=no” porque si espera un usuario y password
spawn sftp $USER@$HOST
match_max 100000
expect \»?assword:\»
send — \»$PASS\r\»
expect \»sftp>\» <—el expect espera este prompt y luego envia el get
send — \"get archivo.txt\r\"
#send — \"\r\"
expect eof
")
echo "==============="
echo "$VAR"
o asi tambien te funciona
#!/bin/bash
HOST=»192.168.1.65″
USER=»amongus»
PASS=»pass1″
CMD=$@
VAR=$(expect -c »
spawn sftp $USER@$HOST
match_max 100000
expect \»?assword:\»
send — \»$PASS\r\»
expect \»sftp>\»
send — \»$CMD \r\»
#send — \»\r\»
expect eof
«)
echo «===============»
echo «$VAR»
y lo ejecutas con
bash remoto.sh «get archivo.txt»