From 871eb0bee37cab2b28f14aea545927e7deeff499 Mon Sep 17 00:00:00 2001 From: Johnny Date: Thu, 14 Aug 2025 07:22:18 +0000 Subject: [PATCH] Actualiser gnome_accounts.sh --- gnome_accounts.sh | 350 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 259 insertions(+), 91 deletions(-) diff --git a/gnome_accounts.sh b/gnome_accounts.sh index b0285e3..d827b78 100644 --- a/gnome_accounts.sh +++ b/gnome_accounts.sh @@ -2,7 +2,7 @@ # Script de sauvegarde et restauration des comptes et partages réseau GNOME # Auteur: Fontaine Johnny -# Version: 1.0 +# Version: 1.1 - Ajout sauvegarde SSH # Couleurs pour l'affichage RED='\033[0;31m' @@ -18,6 +18,7 @@ EVOLUTION_CONFIG_DIR="$HOME/.config/evolution" KEYRING_DIR="$HOME/.local/share/keyrings" NETWORK_CONFIG_DIR="/etc/NetworkManager/system-connections" USER_NETWORK_CONFIG_DIR="$HOME/.config/NetworkManager" +SSH_CONFIG_DIR="$HOME/.ssh" # Fonction d'affichage avec couleurs print_info() { @@ -39,31 +40,31 @@ print_error() { # Fonction pour installer les prérequis manquants install_requirements() { print_info "Installation automatique des prérequis manquants..." - + local packages_to_install=() - + # Vérifier dconf if ! command -v dconf &> /dev/null; then print_info "dconf manquant - ajout à la liste d'installation" packages_to_install+=("dconf-cli") fi - + # Vérifier secret-tool if ! command -v secret-tool &> /dev/null; then print_info "secret-tool manquant - ajout à la liste d'installation" packages_to_install+=("libsecret-tools") fi - + # Vérifier seahorse (gestionnaire de trousseau graphique) if ! command -v seahorse &> /dev/null; then print_info "seahorse manquant - ajout à la liste d'installation" packages_to_install+=("seahorse") fi - + # Installer les paquets manquants if [ ${#packages_to_install[@]} -gt 0 ]; then print_info "Installation des paquets: ${packages_to_install[*]}" - + # Détecter le gestionnaire de paquets if command -v apt &> /dev/null; then sudo apt update && sudo apt install -y "${packages_to_install[@]}" @@ -79,7 +80,7 @@ install_requirements() { print_error "Gestionnaire de paquets non supporté. Installez manuellement: ${packages_to_install[*]}" exit 1 fi - + if [ $? -eq 0 ]; then print_success "Prérequis installés avec succès" else @@ -94,32 +95,32 @@ install_requirements() { # Fonction pour vérifier les prérequis check_requirements() { print_info "Vérification des prérequis..." - + # Vérifier si GNOME est en cours d'exécution if ! pgrep -x "gnome-shell" > /dev/null; then print_warning "GNOME Shell ne semble pas être en cours d'exécution" fi - + # Installer automatiquement les prérequis manquants install_requirements - + print_success "Prérequis vérifiés et installés" } # Fonction de sauvegarde backup_accounts_network() { print_info "Début de la sauvegarde des comptes et partages réseau GNOME..." - + # Créer le répertoire de sauvegarde mkdir -p "$BACKUP_DIR" - + # Date de la sauvegarde BACKUP_DATE=$(date +"%Y%m%d_%H%M%S") BACKUP_BASE="$BACKUP_DIR/gnome-accounts-network-$BACKUP_DATE" - + # Créer un répertoire pour cette sauvegarde mkdir -p "$BACKUP_BASE" - + # Sauvegarder GNOME Online Accounts (GOA) print_info "Sauvegarde des comptes en ligne (GNOME Online Accounts)..." if [ -d "$GOA_CONFIG_DIR" ]; then @@ -132,7 +133,7 @@ backup_accounts_network() { else print_warning "Répertoire GOA non trouvé: $GOA_CONFIG_DIR" fi - + # Sauvegarder Evolution (comptes mail) print_info "Sauvegarde des comptes Evolution (mail)..." if [ -d "$EVOLUTION_CONFIG_DIR" ]; then @@ -154,7 +155,73 @@ backup_accounts_network() { else print_warning "Répertoire Evolution non trouvé: $EVOLUTION_CONFIG_DIR" fi - + + # Sauvegarder la configuration SSH + print_info "Sauvegarde de la configuration SSH..." + if [ -d "$SSH_CONFIG_DIR" ]; then + SSH_BACKUP="$BACKUP_BASE/ssh" + mkdir -p "$SSH_BACKUP" + + print_warning "ATTENTION: Sauvegarde des clés SSH privées!" + print_warning "Cette opération sauvegarde vos clés privées SSH (TRÈS SENSIBLE!)" + + # Sauvegarder tous les fichiers SSH + cp -r "$SSH_CONFIG_DIR"/* "$SSH_BACKUP/" 2>/dev/null + + # Créer un inventaire des fichiers SSH sauvegardés + SSH_INVENTORY="$SSH_BACKUP/ssh-inventory.txt" + { + echo "=== INVENTAIRE DES FICHIERS SSH SAUVEGARDÉS ===" + echo "Date: $(date)" + echo "Utilisateur: $USER" + echo "" + echo "Fichiers sauvegardés:" + ls -la "$SSH_BACKUP/" 2>/dev/null | grep -v "ssh-inventory.txt" + echo "" + echo "⚠ ATTENTION: Clés privées sauvegardées!" + echo "⚠ Ne partagez JAMAIS ces fichiers!" + echo "" + + # Lister les clés publiques avec leurs empreintes + if command -v ssh-keygen &> /dev/null; then + echo "=== EMPREINTES DES CLÉS PUBLIQUES ===" + find "$SSH_BACKUP" -name "*.pub" | while read -r pubkey; do + if [ -f "$pubkey" ]; then + keyname=$(basename "$pubkey") + echo "Clé: $keyname" + ssh-keygen -lf "$pubkey" 2>/dev/null || echo " Erreur lecture empreinte" + echo "" + fi + done + fi + + # Analyser le fichier config s'il existe + if [ -f "$SSH_BACKUP/config" ]; then + echo "=== CONFIGURATION SSH (config) ===" + echo "Hosts configurés:" + grep -E "^Host " "$SSH_BACKUP/config" 2>/dev/null | sed 's/Host / - /' || echo " Aucun host configuré" + echo "" + fi + } > "$SSH_INVENTORY" + + # Sécuriser les permissions des clés privées sauvegardées + find "$SSH_BACKUP" -type f -name "*" ! -name "*.pub" ! -name "config" ! -name "known_hosts*" ! -name "ssh-inventory.txt" -exec chmod 600 {} \; 2>/dev/null + find "$SSH_BACKUP" -name "*.pub" -exec chmod 644 {} \; 2>/dev/null + [ -f "$SSH_BACKUP/config" ] && chmod 600 "$SSH_BACKUP/config" + + print_success "Configuration SSH sauvegardée" + print_warning "Inventaire créé: $SSH_INVENTORY" + + # Compter les éléments sauvegardés + ssh_files_count=$(ls -1 "$SSH_BACKUP/" 2>/dev/null | wc -l) + private_keys_count=$(find "$SSH_BACKUP" -type f -name "*" ! -name "*.pub" ! -name "config" ! -name "known_hosts*" ! -name "ssh-inventory.txt" | wc -l) + public_keys_count=$(find "$SSH_BACKUP" -name "*.pub" | wc -l) + + print_info "SSH sauvegardé: $ssh_files_count fichiers ($private_keys_count clés privées, $public_keys_count clés publiques)" + else + print_warning "Répertoire SSH non trouvé: $SSH_CONFIG_DIR" + fi + # Sauvegarder les paramètres dconf liés aux comptes print_info "Sauvegarde des paramètres des comptes (dconf)..." DCONF_ACCOUNTS="$BACKUP_BASE/accounts-settings.dconf" @@ -164,18 +231,18 @@ backup_accounts_network() { dconf dump /org/gnome/evolution/ dconf dump /org/gnome/settings-daemon/plugins/sharing/ } > "$DCONF_ACCOUNTS" 2>/dev/null - + if [ -s "$DCONF_ACCOUNTS" ]; then print_success "Paramètres des comptes sauvegardés" else print_warning "Aucun paramètre de compte à sauvegarder" fi - + # Sauvegarder les connexions réseau (avec sudo si nécessaire) print_info "Sauvegarde des connexions réseau..." NETWORK_BACKUP="$BACKUP_BASE/network-connections" mkdir -p "$NETWORK_BACKUP" - + # Connexions système (nécessite sudo) if [ -d "$NETWORK_CONFIG_DIR" ] && sudo -n true 2>/dev/null; then print_info "Sauvegarde des connexions système (avec sudo)..." @@ -187,13 +254,13 @@ backup_accounts_network() { else print_warning "Impossible de sauvegarder les connexions système (sudo requis ou non disponible)" fi - + # Connexions utilisateur if [ -d "$USER_NETWORK_CONFIG_DIR" ]; then cp -r "$USER_NETWORK_CONFIG_DIR" "$BACKUP_BASE/user-network-config" 2>/dev/null print_success "Configuration réseau utilisateur sauvegardée" fi - + # Sauvegarder les partages réseau (dconf) print_info "Sauvegarde des paramètres de partage réseau..." DCONF_SHARING="$BACKUP_BASE/sharing-settings.dconf" @@ -202,13 +269,13 @@ backup_accounts_network() { dconf dump /org/gnome/desktop/file-sharing/ dconf dump /org/gtk/settings/file-chooser/ } > "$DCONF_SHARING" 2>/dev/null - + if [ -s "$DCONF_SHARING" ]; then print_success "Paramètres de partage sauvegardés" else print_warning "Aucun paramètre de partage à sauvegarder" fi - + # Sauvegarder la liste des signets de fichiers (lieux réseau) print_info "Sauvegarde des signets de fichiers..." BOOKMARKS_FILE="$HOME/.config/gtk-3.0/bookmarks" @@ -218,15 +285,15 @@ backup_accounts_network() { else print_warning "Fichier de signets non trouvé" fi - + # Sauvegarder le trousseau de clés COMPLET (ATTENTION: SENSIBLE!) print_warning "ATTENTION: Sauvegarde des mots de passe du trousseau de clés..." print_warning "Cette opération sauvegarde les mots de passe en texte quasi-lisible!" print_warning "Protégez absolument ces fichiers de sauvegarde!" - + KEYRING_BACKUP="$BACKUP_BASE/keyring-passwords" mkdir -p "$KEYRING_BACKUP" - + # Sauvegarder les trousseaux de clés physiques if [ -d "$KEYRING_DIR" ]; then print_info "Sauvegarde des fichiers de trousseau de clés..." @@ -237,22 +304,22 @@ backup_accounts_network() { print_warning "Erreur lors de la copie des fichiers de trousseau" fi fi - + # Exporter les secrets avec secret-tool (si disponible) if command -v secret-tool &> /dev/null; then print_info "Export des mots de passe avec secret-tool..." - + # Créer un script d'export des secrets SECRETS_EXPORT="$KEYRING_BACKUP/secrets-export.txt" SECRETS_RESTORE="$KEYRING_BACKUP/restore-secrets.sh" - + { echo "=== SECRETS EXPORTÉS (ATTENTION: SENSIBLE!) ===" echo "Date: $(date)" echo "Utilisateur: $USER" echo "" } > "$SECRETS_EXPORT" - + { echo "#!/bin/bash" echo "# Script de restauration des secrets" @@ -260,7 +327,7 @@ backup_accounts_network() { echo "" } > "$SECRETS_RESTORE" chmod +x "$SECRETS_RESTORE" - + # Sauvegarder tous les WiFi avec leurs mots de passe print_info "Sauvegarde des mots de passe WiFi..." WIFI_PASSWORDS="$KEYRING_BACKUP/wifi-passwords.txt" @@ -269,7 +336,7 @@ backup_accounts_network() { echo "Date: $(date)" echo "" } > "$WIFI_PASSWORDS" - + # Lister toutes les connexions WiFi et extraire les mots de passe if command -v nmcli &> /dev/null; then nmcli -g NAME,TYPE connection show | grep ":802-11-wireless" | cut -d: -f1 | while read -r wifi_name; do @@ -279,7 +346,7 @@ backup_accounts_network() { echo "WiFi: $wifi_name" >> "$WIFI_PASSWORDS" echo "Mot de passe: $password" >> "$WIFI_PASSWORDS" echo "" >> "$WIFI_PASSWORDS" - + # Ajouter au script de restauration echo "# Restauration WiFi: $wifi_name" >> "$SECRETS_RESTORE" echo "nmcli connection modify \"$wifi_name\" 802-11-wireless-security.psk \"$password\" 2>/dev/null || true" >> "$SECRETS_RESTORE" @@ -287,7 +354,7 @@ backup_accounts_network() { fi done fi - + # Exporter les comptes en ligne avec tentative de récupération des tokens print_info "Tentative d'export des tokens des comptes en ligne..." GOA_SECRETS="$KEYRING_BACKUP/goa-secrets.txt" @@ -296,18 +363,18 @@ backup_accounts_network() { echo "Date: $(date)" echo "" } > "$GOA_SECRETS" - + if [ -d "$GOA_CONFIG_DIR" ]; then find "$GOA_CONFIG_DIR" -name "*.conf" | while read -r account_file; do if [ -f "$account_file" ]; then provider=$(grep "Provider=" "$account_file" 2>/dev/null | cut -d'=' -f2) identity=$(grep "Identity=" "$account_file" 2>/dev/null | cut -d'=' -f2) account_id=$(basename "$account_file" .conf) - + if [ -n "$provider" ] && [ -n "$identity" ]; then echo "Compte: $provider - $identity" >> "$GOA_SECRETS" echo "ID: $account_id" >> "$GOA_SECRETS" - + # Chercher les secrets associés secret-tool search goa-identity "$identity" 2>/dev/null | while read -r line; do if [[ "$line" == "secret = "* ]]; then @@ -320,7 +387,7 @@ backup_accounts_network() { fi done fi - + if [ -s "$SECRETS_EXPORT" ] || [ -s "$WIFI_PASSWORDS" ] || [ -s "$GOA_SECRETS" ]; then print_success "Mots de passe sauvegardés" print_warning "FICHIERS SENSIBLES créés dans $KEYRING_BACKUP" @@ -328,7 +395,7 @@ backup_accounts_network() { print_warning "Aucun mot de passe récupéré automatiquement" fi fi - + # Créer une archive compressée print_info "Création de l'archive compressée..." ARCHIVE_FILE="$BACKUP_DIR/gnome-accounts-network-$BACKUP_DATE.tar.gz" @@ -339,7 +406,7 @@ backup_accounts_network() { else print_error "Erreur lors de la création de l'archive" fi - + # Créer un fichier de métadonnées METADATA_FILE="$BACKUP_DIR/backup-metadata-$BACKUP_DATE.txt" { @@ -353,6 +420,7 @@ backup_accounts_network() { echo "Éléments sauvegardés:" echo "- Comptes en ligne GNOME (GOA)" echo "- Configuration Evolution (mail)" + echo "- Configuration SSH (clés et config)" echo "- Paramètres des comptes" echo "- Connexions réseau" echo "- Paramètres de partage" @@ -360,11 +428,12 @@ backup_accounts_network() { echo "- MOTS DE PASSE (trousseau de clés)" echo "- Mots de passe WiFi" echo "" - echo "⚠️ ATTENTION: Fichiers de mots de passe inclus!" - echo "⚠️ Protégez absolument cette sauvegarde!" + echo "⚠ ATTENTION: Clés SSH privées incluses!" + echo "⚠ ATTENTION: Fichiers de mots de passe inclus!" + echo "⚠ Protégez absolument cette sauvegarde!" echo "Archive: $(basename "$ARCHIVE_FILE")" } > "$METADATA_FILE" - + print_success "Sauvegarde terminée! Fichiers dans: $BACKUP_DIR" print_info "Métadonnées sauvegardées dans: $METADATA_FILE" } @@ -372,13 +441,13 @@ backup_accounts_network() { # Fonction de restauration restore_accounts_network() { print_info "Restauration des comptes et partages réseau GNOME..." - + # Lister les sauvegardes disponibles if [ ! -d "$BACKUP_DIR" ] || [ -z "$(ls -A "$BACKUP_DIR"/*.tar.gz 2>/dev/null)" ]; then print_error "Aucune sauvegarde trouvée dans $BACKUP_DIR" return fi - + echo "Sauvegardes disponibles:" select backup_file in "$BACKUP_DIR"/*.tar.gz; do if [ -n "$backup_file" ]; then @@ -387,17 +456,18 @@ restore_accounts_network() { print_error "Sélection invalide" fi done - + # Extraire la date de la sauvegarde sélectionnée BACKUP_DATE=$(basename "$backup_file" | sed 's/gnome-accounts-network-\(.*\)\.tar\.gz/\1/') - + print_info "Restauration depuis: $(basename "$backup_file")" - + # Demander confirmation echo "" print_warning "ATTENTION: Cette opération va :" print_warning "- Remplacer vos comptes et paramètres actuels" print_warning "- Restaurer les mots de passe sauvegardés" + print_warning "- Restaurer la configuration SSH (clés privées incluses!)" print_warning "- Il est recommandé de fermer Evolution et autres applications" echo "" read -p "Voulez-vous continuer avec la restauration? (y/N): " confirm @@ -405,7 +475,7 @@ restore_accounts_network() { print_info "Restauration annulée" return fi - + # Créer un répertoire temporaire pour l'extraction TEMP_DIR=$(mktemp -d) print_info "Extraction de l'archive..." @@ -415,19 +485,20 @@ restore_accounts_network() { rm -rf "$TEMP_DIR" return fi - + RESTORE_DIR="$TEMP_DIR/gnome-accounts-network-$BACKUP_DATE" - + # Créer une sauvegarde de sécurité print_info "Création d'une sauvegarde de sécurité..." SAFETY_DATE=$(date +"%Y%m%d_%H%M%S") SAFETY_BACKUP="$BACKUP_DIR/safety-backup-$SAFETY_DATE" mkdir -p "$SAFETY_BACKUP" - + [ -d "$GOA_CONFIG_DIR" ] && cp -r "$GOA_CONFIG_DIR" "$SAFETY_BACKUP/goa-1.0-backup" 2>/dev/null [ -d "$EVOLUTION_CONFIG_DIR" ] && cp -r "$EVOLUTION_CONFIG_DIR" "$SAFETY_BACKUP/evolution-backup" 2>/dev/null + [ -d "$SSH_CONFIG_DIR" ] && cp -r "$SSH_CONFIG_DIR" "$SAFETY_BACKUP/ssh-backup" 2>/dev/null print_success "Sauvegarde de sécurité créée: $SAFETY_BACKUP" - + # Restaurer GNOME Online Accounts if [ -d "$RESTORE_DIR/goa-1.0" ]; then print_info "Restauration des comptes en ligne..." @@ -436,7 +507,7 @@ restore_accounts_network() { cp -r "$RESTORE_DIR/goa-1.0" "$GOA_CONFIG_DIR" 2>/dev/null print_success "Comptes en ligne restaurés" fi - + # Restaurer Evolution if [ -d "$RESTORE_DIR/evolution" ]; then print_info "Restauration de la configuration Evolution..." @@ -444,14 +515,71 @@ restore_accounts_network() { cp -r "$RESTORE_DIR/evolution"/* "$EVOLUTION_CONFIG_DIR/" 2>/dev/null print_success "Configuration Evolution restaurée" fi - + + # Restaurer la configuration SSH + if [ -d "$RESTORE_DIR/ssh" ]; then + print_warning "ATTENTION: Restauration de la configuration SSH avec clés privées!" + read -p "Restaurer la configuration SSH (clés privées incluses)? (y/N): " restore_ssh + if [[ "$restore_ssh" =~ ^[Yy]$ ]]; then + print_info "Restauration de la configuration SSH..." + + # Créer le répertoire SSH s'il n'existe pas + mkdir -p "$SSH_CONFIG_DIR" + chmod 700 "$SSH_CONFIG_DIR" + + # Copier tous les fichiers SSH + cp -r "$RESTORE_DIR/ssh"/* "$SSH_CONFIG_DIR/" 2>/dev/null + + # Restaurer les permissions correctes + chmod 700 "$SSH_CONFIG_DIR" + find "$SSH_CONFIG_DIR" -type f -name "*" ! -name "*.pub" ! -name "config" ! -name "known_hosts*" ! -name "ssh-inventory.txt" -exec chmod 600 {} \; 2>/dev/null + find "$SSH_CONFIG_DIR" -name "*.pub" -exec chmod 644 {} \; 2>/dev/null + [ -f "$SSH_CONFIG_DIR/config" ] && chmod 600 "$SSH_CONFIG_DIR/config" + [ -f "$SSH_CONFIG_DIR/known_hosts" ] && chmod 644 "$SSH_CONFIG_DIR/known_hosts" + + # Supprimer le fichier d'inventaire s'il a été copié + [ -f "$SSH_CONFIG_DIR/ssh-inventory.txt" ] && rm -f "$SSH_CONFIG_DIR/ssh-inventory.txt" + + print_success "Configuration SSH restaurée" + + # Afficher les clés restaurées + if command -v ssh-keygen &> /dev/null; then + print_info "Clés publiques restaurées:" + find "$SSH_CONFIG_DIR" -name "*.pub" | while read -r pubkey; do + if [ -f "$pubkey" ]; then + keyname=$(basename "$pubkey") + echo " - $keyname" + ssh-keygen -lf "$pubkey" 2>/dev/null | sed 's/^/ /' + fi + done + fi + + # Démarrer ssh-agent si pas déjà fait et ajouter les clés + if command -v ssh-add &> /dev/null; then + print_info "Tentative d'ajout des clés à l'agent SSH..." + if [ -z "$SSH_AUTH_SOCK" ]; then + eval $(ssh-agent -s) 2>/dev/null + fi + + # Ajouter toutes les clés privées trouvées + find "$SSH_CONFIG_DIR" -type f -name "*" ! -name "*.pub" ! -name "config" ! -name "known_hosts*" | while read -r private_key; do + if [ -f "$private_key" ]; then + ssh-add "$private_key" 2>/dev/null && echo " Clé ajoutée: $(basename "$private_key")" || true + fi + done + fi + else + print_info "Restauration SSH ignorée" + fi + fi + # Restaurer les paramètres des comptes if [ -f "$RESTORE_DIR/accounts-settings.dconf" ] && [ -s "$RESTORE_DIR/accounts-settings.dconf" ]; then print_info "Restauration des paramètres des comptes..." dconf load / < "$RESTORE_DIR/accounts-settings.dconf" 2>/dev/null print_success "Paramètres des comptes restaurés" fi - + # Restaurer les connexions réseau if [ -d "$RESTORE_DIR/network-connections" ]; then print_info "Restauration des connexions réseau..." @@ -463,7 +591,7 @@ restore_accounts_network() { print_warning "Sudo requis pour restaurer les connexions système - ignoré" fi fi - + # Restaurer la configuration réseau utilisateur if [ -d "$RESTORE_DIR/user-network-config" ]; then print_info "Restauration de la configuration réseau utilisateur..." @@ -471,38 +599,38 @@ restore_accounts_network() { cp -r "$RESTORE_DIR/user-network-config" "$USER_NETWORK_CONFIG_DIR" 2>/dev/null print_success "Configuration réseau utilisateur restaurée" fi - + # Restaurer les paramètres de partage if [ -f "$RESTORE_DIR/sharing-settings.dconf" ] && [ -s "$RESTORE_DIR/sharing-settings.dconf" ]; then print_info "Restauration des paramètres de partage..." dconf load / < "$RESTORE_DIR/sharing-settings.dconf" 2>/dev/null print_success "Paramètres de partage restaurés" fi - + # Restaurer les trousseaux de clés et mots de passe if [ -d "$RESTORE_DIR/keyring-files" ]; then print_warning "ATTENTION: Restauration des trousseaux de clés avec mots de passe!" read -p "Restaurer les mots de passe sauvegardés? (y/N): " restore_passwords if [[ "$restore_passwords" =~ ^[Yy]$ ]]; then print_info "Restauration des fichiers de trousseau..." - + # Sauvegarder les trousseaux actuels [ -d "$KEYRING_DIR" ] && cp -r "$KEYRING_DIR" "$SAFETY_BACKUP/keyring-backup" 2>/dev/null - + # Restaurer les trousseaux mkdir -p "$HOME/.local/share" rm -rf "$KEYRING_DIR" 2>/dev/null cp -r "$RESTORE_DIR/keyring-files/keyrings" "$KEYRING_DIR" 2>/dev/null - + print_success "Trousseaux de clés restaurés" - + # Restaurer les mots de passe WiFi if [ -f "$RESTORE_DIR/keyring-passwords/restore-secrets.sh" ]; then print_info "Exécution du script de restauration des secrets..." bash "$RESTORE_DIR/keyring-passwords/restore-secrets.sh" 2>/dev/null print_success "Script de restauration exécuté" fi - + # Redémarrer le démon gnome-keyring si possible if pgrep -x "gnome-keyring-daemon" > /dev/null; then print_info "Redémarrage du démon gnome-keyring..." @@ -523,28 +651,30 @@ restore_accounts_network() { cp "$RESTORE_DIR/gtk-bookmarks" "$HOME/.config/gtk-3.0/bookmarks" 2>/dev/null print_success "Signets de fichiers restaurés" fi - + # Nettoyer rm -rf "$TEMP_DIR" - + print_success "Restauration terminée!" print_warning "Actions recommandées :" print_warning "1. Redémarrez votre session complètement (déconnexion/reconnexion)" print_warning "2. Vérifiez vos comptes dans Paramètres > Comptes en ligne" print_warning "3. Testez vos connexions WiFi" - print_warning "4. Relancez Evolution si vous l'utilisez" - print_warning "5. Si les mots de passe ne fonctionnent pas, vérifiez les fichiers dans keyring-passwords/" + print_warning "4. Testez vos connexions SSH (ssh-add -l pour voir les clés chargées)" + print_warning "5. Relancez Evolution si vous l'utilisez" + print_warning "6. Si les mots de passe ne fonctionnent pas, vérifiez les fichiers dans keyring-passwords/" + print_warning "7. Vérifiez les permissions de vos clés SSH (~/.ssh/)" } # Fonction pour lister les sauvegardes list_backups() { print_info "Sauvegardes disponibles:" - + if [ ! -d "$BACKUP_DIR" ]; then print_warning "Répertoire de sauvegarde non trouvé: $BACKUP_DIR" return fi - + for backup in "$BACKUP_DIR"/gnome-accounts-network-*.tar.gz; do if [ -f "$backup" ]; then filename=$(basename "$backup") @@ -552,7 +682,7 @@ list_backups() { readable_date=$(echo "$date_part" | sed 's/\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)_\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)/\3\/\2\/\1 \4:\5:\6/') size=$(du -h "$backup" | cut -f1) echo " - $filename (Taille: $size, Date: $readable_date)" - + # Vérifier les fichiers associés metadata_file="$BACKUP_DIR/backup-metadata-$date_part.txt" if [ -f "$metadata_file" ]; then @@ -560,7 +690,7 @@ list_backups() { fi fi done - + if [ -z "$(ls -A "$BACKUP_DIR"/gnome-accounts-network-*.tar.gz 2>/dev/null)" ]; then print_warning "Aucune sauvegarde trouvée" fi @@ -569,15 +699,15 @@ list_backups() { # Fonction pour nettoyer les anciennes sauvegardes cleanup_backups() { print_info "Nettoyage des anciennes sauvegardes..." - + if [ ! -d "$BACKUP_DIR" ]; then print_warning "Répertoire de sauvegarde non trouvé" return fi - + read -p "Combien de sauvegardes souhaitez-vous conserver? (défaut: 3): " keep_count keep_count=${keep_count:-3} - + # Supprimer les anciennes sauvegardes (garder les plus récentes) ls -t "$BACKUP_DIR"/gnome-accounts-network-*.tar.gz 2>/dev/null | tail -n +$((keep_count + 1)) | while read -r old_backup; do if [ -f "$old_backup" ]; then @@ -588,7 +718,7 @@ cleanup_backups() { rm -rf "$BACKUP_DIR/safety-backup-"* 2>/dev/null fi done - + print_success "Nettoyage terminé" } @@ -596,7 +726,7 @@ cleanup_backups() { show_accounts_info() { print_info "Informations sur les comptes et connexions actuels:" echo "" - + # Comptes en ligne GNOME if [ -d "$GOA_CONFIG_DIR" ]; then echo "📧 Comptes en ligne GNOME:" @@ -609,7 +739,43 @@ show_accounts_info() { done echo "" fi - + + # Configuration SSH + if [ -d "$SSH_CONFIG_DIR" ]; then + echo "🔐 Configuration SSH:" + + # Lister les clés SSH + echo " Clés SSH disponibles:" + find "$SSH_CONFIG_DIR" -name "*.pub" | while read -r pubkey; do + if [ -f "$pubkey" ]; then + keyname=$(basename "$pubkey" .pub) + echo " - $keyname" + if command -v ssh-keygen &> /dev/null; then + fingerprint=$(ssh-keygen -lf "$pubkey" 2>/dev/null | awk '{print $2}') + [ -n "$fingerprint" ] && echo " Empreinte: $fingerprint" + fi + fi + done + + # Analyser le fichier config SSH + if [ -f "$SSH_CONFIG_DIR/config" ]; then + echo " Hosts configurés dans ~/.ssh/config:" + grep -E "^Host " "$SSH_CONFIG_DIR/config" 2>/dev/null | sed 's/Host / - /' || echo " Aucun host configuré" + fi + + # Clés chargées dans l'agent SSH + if command -v ssh-add &> /dev/null && [ -n "$SSH_AUTH_SOCK" ]; then + echo " Clés chargées dans l'agent SSH:" + ssh_keys_loaded=$(ssh-add -l 2>/dev/null) + if [ $? -eq 0 ]; then + echo "$ssh_keys_loaded" | sed 's/^/ /' + else + echo " Aucune clé chargée ou agent SSH non disponible" + fi + fi + echo "" + fi + # Connexions réseau if command -v nmcli &> /dev/null; then echo "🌐 Connexions réseau configurées:" @@ -620,7 +786,7 @@ show_accounts_info() { done echo "" fi - + # Signets de fichiers if [ -f "$HOME/.config/gtk-3.0/bookmarks" ]; then echo "📁 Signets de fichiers/réseau:" @@ -640,6 +806,7 @@ show_help() { echo "Ce script sauvegarde et restaure :" echo " • Comptes en ligne GNOME (Google, Microsoft, Nextcloud, etc.)" echo " • Configuration Evolution (comptes mail)" + echo " • Configuration SSH (clés privées, clés publiques, fichier config)" echo " • Connexions réseau WiFi/Ethernet" echo " • Paramètres de partage réseau" echo " • Signets de fichiers réseau" @@ -655,9 +822,10 @@ show_help() { echo " help, -h Afficher cette aide" echo "" echo "IMPORTANT:" - echo " ⚠️ Les mots de passe SONT sauvegardés (non sécurisé)" - echo " ⚠️ Protégez absolument vos fichiers de sauvegarde" - echo " ⚠️ Ne partagez jamais ces sauvegardes" + echo " ⚠ Les mots de passe SONT sauvegardés (non sécurisé)" + echo " ⚠ Les clés SSH privées SONT sauvegardées (TRÈS sensible!)" + echo " ⚠ Protégez absolument vos fichiers de sauvegarde" + echo " ⚠ Ne partagez jamais ces sauvegardes" echo " • Sudo peut être requis pour les connexions système" echo "" echo "Répertoire de sauvegarde: $BACKUP_DIR" @@ -666,13 +834,13 @@ show_help() { # Fonction pour afficher le menu principal show_menu() { echo "" - echo "==================================================" - echo " Script de gestion des comptes et réseau GNOME" - echo "==================================================" + echo "==========================================================" + echo " Script de gestion des comptes, réseau et SSH GNOME" + echo "==========================================================" echo "" echo "Choisissez une action:" - echo "1) Sauvegarder les comptes et réseau" - echo "2) Restaurer les comptes et réseau" + echo "1) Sauvegarder les comptes, réseau et SSH" + echo "2) Restaurer les comptes, réseau et SSH" echo "3) Lister les sauvegardes" echo "4) Nettoyer les anciennes sauvegardes" echo "5) Afficher les comptes/connexions actuels" @@ -684,7 +852,7 @@ show_menu() { # Fonction pour demander de continuer ask_continue() { echo "" - echo "==================================================" + echo "==========================================================" read -p "Appuyez sur Entrée pour revenir au menu principal..." echo "" } @@ -694,7 +862,7 @@ interactive_menu() { while true; do show_menu read -p "Votre choix (1-7): " choice - + case $choice in 1) check_requirements && backup_accounts_network @@ -762,4 +930,4 @@ main() { esac } -main "$@" \ No newline at end of file +main "$@"