web-dev-qa-db-fra.com

comment utiliser s'attendre avec bash

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.

3
Uvais Ibrahim

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.

2
tim

Si vous voulez passer uniquement le mot de passe root, vous devez

  • soit configurer une connexion sans mot de passe dans le compte d'utilisateur, par exemple en utilisant l'authentification par clé publique et un agent ssh côté client,
  • ou configurez le serveur (c'est-à-dire pour autoriser la connexion en tant que root, puis faites ssh -t [email protected]
1
MvG

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.

1
Eric Hodonsky