J'ai créé un script Shell comme indiqué ci-dessous.Ce script va se connecter à un serveur distant en tant qu'utilisateur normal, puis basculer vers l'utilisateur root pour créer un répertoire.Le script est tel qu'indiqué ci-dessous.
ssh -t [email protected] '
su root -c "
echo\"Donnez le nom du répertoire: \";
read dir;
mkdir\$ dir;
";
'
Ici, le script demandera d’abord le mot de passe pour l’utilisateur normal. Ensuite, il demandera de nouveau le mot de passe root. Comment puis-je l’automatiser à l’aide de la commande expect
? être fait avec expect
.
S'il vous plaît aidez-moi.
SSHPASS, qui envoie un mot de passe avec une requête SSH, est un moyen plus simple et plus efficace que prévu:
sshpass -p <PASSWORD> ssh <USER>@<SERVER> <SSH Command>
PASSWORD est le mot de passe à saisir à l'invite, USER est le nom d'utilisateur, SERVER est l'adresse IP du serveur (par exemple, 10.8.100.100) et SSH Command est la commande à exécuter.
Pour votre exemple:
sshpass -p <PASSWORD> ssh [email protected] mkdir <full path for new dir>
Pour installer SSHPASS:
Sudo apt-get install sshpass
Si vous souhaitez que la session SSH reste ensuite, vous pouvez utiliser ce qui suit,
#!/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"
"
Cela laissera l’accès root connecté, mais jusqu’à ce que le script envoie une instruction de retour, il gardera le contrôle jusqu’à ce que vous appuyiez sur Ctrl+c. Mais cela devrait répondre à votre question.
Si vous voulez passer uniquement le mot de passe root, vous devez
ssh -t [email protected] …
Je ne vois pas de réponse acceptée des années plus tard, je vais donc ajouter quelque chose qui pourrait être utile aux autres. Ma situation n’avait rien à voir avec SSH, mais en utilisant spawn, je pouvais le faire fonctionner de la manière suivante.
expect -c "
spawn myProc
expect \"Do you wish to continue with XYZ? (y/N)\" {
send \"n\r\"
exp_continue
}
"
J'espère que cela t'aides.