#!/bin/bash # Mise à jour des machines présentes dans .ssh/config avec choix d'ignorer certaines. # Fonction pour mettre à jour avec apt update_with_apt() { echo "--- Mise à jour avec apt sur $1" ssh -tt "$1" 'sudo apt update && sudo apt upgrade --assume-yes' } # Fonction pour mettre à jour avec dnf update_with_dnf() { echo "--- Mise à jour avec dnf sur $1" ssh -tt "$1" 'sudo dnf check-update && sudo dnf upgrade -y' } # Déclaration d'une fonction pour récupérer les alias à partir du fichier ~/.ssh/config get_ssh_aliases() { # Parcours du fichier ~/.ssh/config et récupération du premier Host (excluant "*") awk 'tolower($1) == "host" && $2 != "*" && !seen[$2]++ {print $2}' ~/.ssh/config # Parcours des fichiers dans le dossier ~/.ssh/include et récupération du premier Host (excluant "*") for include_file in ~/.ssh/include/*; do awk 'tolower($1) == "host" && $2 != "*" && !seen[$2]++ {print $2}' "$include_file" done } # Récupérer les alias SSH machines=($(get_ssh_aliases)) # Parcourir la liste des machines for machine in "${machines[@]}"; do # Vérification si le nom de machine est présent dans le fichier .config/updateall-hosts if grep -q "^$machine " ~/.config/updateall-hosts; then status=$(grep "^$machine " ~/.config/updateall-hosts | awk '{print $2}') if [ "$status" = "1" ]; then echo "--------------------------------------------------------------------------------" echo "--- Vérification du gestionnaire de paquets sur $machine" if timeout 5 ssh "$machine" which apt > /dev/null 2>&1; then update_with_apt "$machine" elif timeout 5 ssh "$machine" which dnf > /dev/null 2>&1; then update_with_dnf "$machine" else echo "[x] Aucun gestionnaire de paquets trouvé sur $machine" fi fi else echo "--------------------------------------------------------------------------------" if timeout 5 ssh "$machine" which apt > /dev/null 2>&1; then update_with_apt "$machine" elif timeout 5 ssh "$machine" which dnf > /dev/null 2>&1; then update_with_dnf "$machine" else echo "[x] Aucun gestionnaire de paquets trouvé sur $machine" fi read -p "--- Le traitement pour $machine vient de se terminer. Souhaitez-vous le refaire les prochaines fois ? (o/n) " choice if [ "$choice" = "o" ]; then echo "$machine 1" >> ~/.config/updateall-hosts else echo "$machine 0" >> ~/.config/updateall-hosts continue fi fi done