Exécution automatisée des commandes Linux


Nous avons souvent besoin d'automatiser certains scripts qui s'exécutent régulièrement.

Il y a souvent des cas où nous devons entrer manuellement. Pour contourner ces validations interactives. J'ai choisi d'utiliser sshpass et expect pour résoudre.

sshpass


sshpass est un outil de ligne de commande simple et léger qui nous permet de fournir un mot de passe à l'invite de commande elle-même (vérification de mot de passe non interactive).

installer :


yum install sshpass -y

utiliser :


sshpass -p ssh -o StrictHostKeyChecking=no @ "commande"

Exemple :


# Exécution de la commande à distance
sshpass -p ssh -o StrictHostKeyChecking=no @ "ls -al"
# Connexion à distance
sshpass -p ssh -o StrictHostKeyChecking=no @

attendre


expect est également une programmation de script relativement simple et gratuitel langage basé sur TCL, qui est utilisé pour communiquer des tâches automatiques et interactives sans intervention humaine.

Installer :


yum install -y expect

Utilisation courante :



  • send : utilisé pour envoyer une chaîne au processus
  • expect< /code> : reçoit la chaîne du processus
  • spawn : démarre un nouveau processus
  • interact : Autorise l'interaction de l'utilisateur et donne le contrôle à la console, qui peut être actionnée manuellement à ce moment
  • attend eof : Cela correspond à spawn code> pour indiquer la fin de la capture des informations de sortie du terminal, similaire à if….endif


Instructions spéciales:


  • La commande
  • send reçoit un paramètre de chaîne et envoie le paramètre au processus, qui est généralement utilisé pour l'envoyer au processus démarré parla commande spawn.
    La commande
  • attendre est l'opposé de la commande envoyer. La commande expect est généralement utilisée pour attendre les commentaires d'un processus.
    La commande
  • expect peut accepter un paramètre de chaîne ou un paramètre d'expression régulière. Généralement utilisé pour attendre les commentaires du processus lancé par la commande spawn.


Exemple :


Utilisez attendre pour telnet ssh
#!/usr/bin/expect
# Dites au système quel shell utiliser pour exécuter le fichier

set timeout 30
# Définissez le délai d'attente en secondes, timeout -1 signifie jamais d'expiration

set HOST [lindex $argv 0]
# Affecte le premier paramètre à la variable HOST

set PASSWORD [lindex $argv 1]
# Attribuez le deuxième paramètre à la variable PASSWORD

spawn ssh [email protected]$HOST
# Démarrez un nouveau processus qui utilise le compte rootssh pour se connecter à distance à l'adresse $HOST

attendre {
"yes/no" {
envoyer "yes\\r" ;
exp_continue
}
"password :" {
send "$PASSWORD\\r"
}
}

# Multi-succursale en attente des commentaires du processus ssh
# Si la chaîne contient oui/non, exécutez la branche un
# Si la chaîne contient mot de passe :, exécutez la branche deux
# Où exp_continue est attaché à un élément de jugement attendu, de sorte que une fois l'élément mis en correspondance, il peut continuer à correspondre à l'instruction de jugement attendue "*#"
send "ll -a\\r"
# Les deux phrases ci-dessus sont exécutées lorsqu'une seule branche correspond # ll -a

attend eof
exit
# attend eof et exit signifie que lorsque eof est détecté, exit sera exécuté et le programme se terminera.

Utilisez expect imbriqué dans bash, et maven est automatiquement empaqueté dans leExemple
#!/usr/bin/env bash

DIR_LIST=("module1" "module2" "module3" "module_build" "module4" "module5")
PASSWORD="mot de passe \\r"

for dir in ${DIR_LIST[@]}
do
# echo $dir
if [ -d "$dir" ]; then
rm -rf "$dir"
fi
GIT_URL="git clone -b dev [email protected]:/gitrepo/xxx/$dir"
# echo $GIT_URL
/usr/bin/expect <<-EOF
set timeout -1
spawn $GIT_URL
expect "*password:"
envoyer $PASSWORD
attendre eof
EOF
echo -e "\
"
done

sleep 1

mvn clean install -f module_build/ -Dmaven.test.skip=true
Commandes d'automatisation Linux