it-swarm-es.com

cómo usar esperar con bash

He creado un script de Shell como se indica a continuación. Este script iniciará sesión en un servidor remoto como un usuario normal y luego cambiará a usuario root para crear un directorio. El script es como se muestra a continuación.

ssh -t [email protected] '
su raíz -c "
echo\"Nombre del directorio: \";
leer dir;
mkdir\$ dir;
";
'

Aquí, el script pedirá primero la contraseña para el usuario normal. Luego, nuevamente solicitará la contraseña de root. ¿Cómo podría automatizar esto usando el comando expect? Quiero proporcionar la contraseña automáticamente solo para el usuario root. Creo que se puede hacer con expect .

Por favor, ayúdame.

3
Uvais Ibrahim

Una forma mejor/más fácil que usar esperar es SSHPASS, que envía una contraseña con una solicitud SSH:

sshpass -p <PASSWORD> ssh <USER>@<SERVER> <SSH Command>

CONTRASEÑA es la contraseña que se ingresará cuando se le solicite, USUARIO es el nombre de usuario, SERVIDOR es la dirección IP del servidor (por ejemplo, 10.8.100.100) y SSH Command es el comando que desea ejecutar.

Por tu ejemplo:

sshpass -p <PASSWORD> ssh [email protected] mkdir <full path for new dir>

Para instalar SSHPASS:

Sudo apt-get install sshpass

Si desea que la sesión SSH permanezca después de lo que puede usar, espere con lo siguiente,

#!/bin/bash
##Enter Username and Password Details:
userName=<UserName>
password=<Password>

expect -c "
    spawn ssh ${userName}@10.8.100.100 ##put your own IP here
    expect "password: " ##or whatever password Prompt you get
    send "$password\r"
    expect -re "Last Login: " ##or whatever the end of your welcome message is
    send "su -i"
    expect "password for <UserName>"
    send "$password\r"
"

Esto dejará el acceso raíz registrado, sin embargo, hasta que el script envíe una declaración de devolución, mantendrá el control hasta que presione Ctrl+c. Pero esto debería responder a su pregunta.

2
tim

Si desea pasar solo la contraseña de root, debe

  • configurar un inicio de sesión sin contraseña en la cuenta de usuario, p. usando la autenticación de clave pública y un agente ssh en el lado del cliente,
  • o configurar el servidor (es decir, para permitir el inicio de sesión como root, y luego hacer ssh -t [email protected]
1
MvG

No veo una respuesta aceptada años después, así que también agregaré algo que pueda ser útil para otros. Mi situación no tenía nada que ver con SSH, pero usando spawn esperar de la siguiente manera pude hacerlo funcionar.

expect -c "  
  spawn myProc
  expect \"Do you wish to continue with XYZ? (y/N)\" {
    send \"n\r\"
    exp_continue
  }          
"

Espero que esto ayude.

1
Eric Hodonsky