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.
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.
Si desea pasar solo la contraseña de root, debe
ssh -t [email protected] …
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.