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”