Création de scripts expect pratiques pour les tâches courantes
Dans cette étape, nous allons créer des scripts expect pratiques pour les tâches courantes que les administrateurs système doivent souvent automatiser. Nous nous concentrerons sur les opérations de fichiers, les interactions utilisateur et la surveillance du système.
Automatisation du transfert de fichiers avec expect
Créons un script expect qui automatise le transfert d'un fichier à l'aide de la commande scp. Puisque nous ne pouvons pas effectuer un véritable transfert de fichiers dans cet environnement, nous allons le simuler :
cd ~/project
nano file_transfer.sh
Entrez le contenu suivant pour simuler un transfert de fichiers de type SCP :
#!/bin/bash
echo "scp file transfer simulation"
echo "Source file: $1"
echo "Destination: $2"
echo "Password: "
read -s password
if [ "$password" == "transfer123" ]; then
echo "Transferring file..."
echo "0%"
sleep 1
echo "25%"
sleep 1
echo "50%"
sleep 1
echo "75%"
sleep 1
echo "100%"
echo "File transfer completed successfully."
else
echo "Authentication failed."
exit 1
fi
Enregistrez le fichier et rendez-le exécutable :
chmod +x ~/project/file_transfer.sh
Maintenant, créons un script expect pour automatiser ce transfert de fichiers :
cd ~/project
nano file_transfer.exp
Entrez le contenu suivant :
#!/usr/bin/expect -f
## Set variables
set timeout 10
set source_file "local_file.txt"
set destination "user@remote:/path/to/destination/"
set password "transfer123"
## Create a dummy source file
spawn bash -c "echo 'This is a test file' > $source_file"
expect eof
## Start the file transfer simulation
spawn ./file_transfer.sh $source_file $destination
## Handle the password prompt
expect "Password: "
send "$password\r"
## Monitor the transfer progress
expect "0%"
puts "Transfer started..."
expect "25%"
puts "Transfer 1/4 complete..."
expect "50%"
puts "Transfer 1/2 complete..."
expect "75%"
puts "Transfer 3/4 complete..."
expect "100%"
puts "Transfer almost done..."
expect "File transfer completed successfully."
puts "File transfer automation completed!"
## Clean up the dummy file
spawn bash -c "rm $source_file"
expect eof
Enregistrez le fichier et rendez-le exécutable :
chmod +x ~/project/file_transfer.exp
Exécutez le script d'automatisation du transfert de fichiers :
cd ~/project
./file_transfer.exp
Exemple de sortie :
spawn bash -c echo 'This is a test file' > local_file.txt
spawn ./file_transfer.sh local_file.txt user@remote:/path/to/destination/
scp file transfer simulation
Source file: local_file.txt
Destination: user@remote:/path/to/destination/
Password:
Transferring file...
0%
Transfer started...
25%
Transfer 1/4 complete...
50%
Transfer 1/2 complete...
75%
Transfer 3/4 complete...
100%
Transfer almost done...
File transfer completed successfully.
File transfer automation completed!
spawn bash -c rm local_file.txt
Automatisation de la création d'utilisateurs avec expect
Maintenant, créons un script expect qui automatise la création d'utilisateurs. Encore une fois, nous allons simuler ce processus :
cd ~/project
nano create_user.sh
Entrez le contenu suivant :
#!/bin/bash
echo "User creation utility"
echo "Please enter new username: "
read username
echo "Please enter password for $username: "
read -s password
echo "Please confirm password: "
read -s password_confirm
if [ "$password" != "$password_confirm" ]; then
echo "Error: Passwords do not match."
exit 1
fi
echo "Creating user $username..."
echo "User $username created successfully."
echo "Do you want to add this user to the sudo group? (yes/no): "
read sudo_choice
if [ "$sudo_choice" == "yes" ]; then
echo "Adding $username to sudo group..."
echo "User $username added to sudo group."
fi
echo "User setup completed."
Enregistrez le fichier et rendez-le exécutable :
chmod +x ~/project/create_user.sh
Maintenant, créons un script expect pour automatiser la création d'utilisateurs :
cd ~/project
nano create_user.exp
Entrez le contenu suivant :
#!/usr/bin/expect -f
## Set variables
set timeout 10
set username "testuser"
set password "P@ssw0rd123"
set add_sudo "yes"
## Start the user creation utility
spawn ./create_user.sh
## Handle the username prompt
expect "Please enter new username: "
send "$username\r"
## Handle the password prompt
expect "Please enter password for $username: "
send "$password\r"
## Handle the password confirmation prompt
expect "Please confirm password: "
send "$password\r"
## Wait for the user creation confirmation
expect "User $username created successfully."
## Handle the sudo prompt
expect "Do you want to add this user to the sudo group? (yes/no): "
send "$add_sudo\r"
## If we chose to add to sudo, wait for confirmation
if {$add_sudo == "yes"} {
expect "User $username added to sudo group."
}
## Wait for completion
expect "User setup completed."
puts "\nUser creation automation completed successfully!"
Enregistrez le fichier et rendez-le exécutable :
chmod +x ~/project/create_user.exp
Exécutez le script d'automatisation de la création d'utilisateurs :
cd ~/project
./create_user.exp
Exemple de sortie :
spawn ./create_user.sh
User creation utility
Please enter new username:
testuser
Please enter password for testuser:
Please confirm password:
Creating user testuser...
User testuser created successfully.
Do you want to add this user to the sudo group? (yes/no):
yes
Adding testuser to sudo group...
User testuser added to sudo group.
User setup completed.
User creation automation completed successfully!
Comprendre les scripts expect pratiques
Les scripts pratiques que nous avons créés démontrent plusieurs concepts importants pour l'automatisation en conditions réelles :
- Interaction séquentielle : Les deux scripts suivent une séquence définie d'invites et de réponses.
- Surveillance de la progression : Le script de transfert de fichiers surveille la progression et fournit des mises à jour conviviales.
- Logique conditionnelle : Le script de création d'utilisateurs utilise une logique conditionnelle pour gérer l'option sudo.
- Configuration et nettoyage de l'environnement : Le script de transfert de fichiers crée et nettoie les fichiers de test.
Ces techniques peuvent être appliquées pour automatiser de nombreuses tâches courantes d'administration système, telles que :
- Sauvegardes à distance
- Installations de logiciels
- Configuration du système
- Opérations par lots
En maîtrisant expect, vous pouvez automatiser des processus interactifs complexes qui nécessiteraient autrement une intervention manuelle, ce qui permet de gagner du temps et de réduire le risque d'erreurs humaines.