Actualiser gnome_accounts.sh

This commit is contained in:
2025-08-14 07:22:18 +00:00
parent b2c7b674d4
commit 871eb0bee3

View File

@@ -2,7 +2,7 @@
# Script de sauvegarde et restauration des comptes et partages réseau GNOME # Script de sauvegarde et restauration des comptes et partages réseau GNOME
# Auteur: Fontaine Johnny # Auteur: Fontaine Johnny
# Version: 1.0 # Version: 1.1 - Ajout sauvegarde SSH
# Couleurs pour l'affichage # Couleurs pour l'affichage
RED='\033[0;31m' RED='\033[0;31m'
@@ -18,6 +18,7 @@ EVOLUTION_CONFIG_DIR="$HOME/.config/evolution"
KEYRING_DIR="$HOME/.local/share/keyrings" KEYRING_DIR="$HOME/.local/share/keyrings"
NETWORK_CONFIG_DIR="/etc/NetworkManager/system-connections" NETWORK_CONFIG_DIR="/etc/NetworkManager/system-connections"
USER_NETWORK_CONFIG_DIR="$HOME/.config/NetworkManager" USER_NETWORK_CONFIG_DIR="$HOME/.config/NetworkManager"
SSH_CONFIG_DIR="$HOME/.ssh"
# Fonction d'affichage avec couleurs # Fonction d'affichage avec couleurs
print_info() { print_info() {
@@ -155,6 +156,72 @@ backup_accounts_network() {
print_warning "Répertoire Evolution non trouvé: $EVOLUTION_CONFIG_DIR" print_warning "Répertoire Evolution non trouvé: $EVOLUTION_CONFIG_DIR"
fi 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 # Sauvegarder les paramètres dconf liés aux comptes
print_info "Sauvegarde des paramètres des comptes (dconf)..." print_info "Sauvegarde des paramètres des comptes (dconf)..."
DCONF_ACCOUNTS="$BACKUP_BASE/accounts-settings.dconf" DCONF_ACCOUNTS="$BACKUP_BASE/accounts-settings.dconf"
@@ -353,6 +420,7 @@ backup_accounts_network() {
echo "Éléments sauvegardés:" echo "Éléments sauvegardés:"
echo "- Comptes en ligne GNOME (GOA)" echo "- Comptes en ligne GNOME (GOA)"
echo "- Configuration Evolution (mail)" echo "- Configuration Evolution (mail)"
echo "- Configuration SSH (clés et config)"
echo "- Paramètres des comptes" echo "- Paramètres des comptes"
echo "- Connexions réseau" echo "- Connexions réseau"
echo "- Paramètres de partage" echo "- Paramètres de partage"
@@ -360,8 +428,9 @@ backup_accounts_network() {
echo "- MOTS DE PASSE (trousseau de clés)" echo "- MOTS DE PASSE (trousseau de clés)"
echo "- Mots de passe WiFi" echo "- Mots de passe WiFi"
echo "" echo ""
echo "⚠ ATTENTION: Fichiers de mots de passe inclus!" echo "⚠ ATTENTION: Clés SSH privées incluses!"
echo "⚠ Protégez absolument cette sauvegarde!" echo "⚠ ATTENTION: Fichiers de mots de passe inclus!"
echo "⚠ Protégez absolument cette sauvegarde!"
echo "Archive: $(basename "$ARCHIVE_FILE")" echo "Archive: $(basename "$ARCHIVE_FILE")"
} > "$METADATA_FILE" } > "$METADATA_FILE"
@@ -398,6 +467,7 @@ restore_accounts_network() {
print_warning "ATTENTION: Cette opération va :" print_warning "ATTENTION: Cette opération va :"
print_warning "- Remplacer vos comptes et paramètres actuels" print_warning "- Remplacer vos comptes et paramètres actuels"
print_warning "- Restaurer les mots de passe sauvegardés" 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" print_warning "- Il est recommandé de fermer Evolution et autres applications"
echo "" echo ""
read -p "Voulez-vous continuer avec la restauration? (y/N): " confirm read -p "Voulez-vous continuer avec la restauration? (y/N): " confirm
@@ -426,6 +496,7 @@ restore_accounts_network() {
[ -d "$GOA_CONFIG_DIR" ] && cp -r "$GOA_CONFIG_DIR" "$SAFETY_BACKUP/goa-1.0-backup" 2>/dev/null [ -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 "$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" print_success "Sauvegarde de sécurité créée: $SAFETY_BACKUP"
# Restaurer GNOME Online Accounts # Restaurer GNOME Online Accounts
@@ -445,6 +516,63 @@ restore_accounts_network() {
print_success "Configuration Evolution restaurée" print_success "Configuration Evolution restaurée"
fi 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 # Restaurer les paramètres des comptes
if [ -f "$RESTORE_DIR/accounts-settings.dconf" ] && [ -s "$RESTORE_DIR/accounts-settings.dconf" ]; then if [ -f "$RESTORE_DIR/accounts-settings.dconf" ] && [ -s "$RESTORE_DIR/accounts-settings.dconf" ]; then
print_info "Restauration des paramètres des comptes..." print_info "Restauration des paramètres des comptes..."
@@ -532,8 +660,10 @@ restore_accounts_network() {
print_warning "1. Redémarrez votre session complètement (déconnexion/reconnexion)" 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 "2. Vérifiez vos comptes dans Paramètres > Comptes en ligne"
print_warning "3. Testez vos connexions WiFi" print_warning "3. Testez vos connexions WiFi"
print_warning "4. Relancez Evolution si vous l'utilisez" print_warning "4. Testez vos connexions SSH (ssh-add -l pour voir les clés chargées)"
print_warning "5. Si les mots de passe ne fonctionnent pas, vérifiez les fichiers dans keyring-passwords/" 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 # Fonction pour lister les sauvegardes
@@ -610,6 +740,42 @@ show_accounts_info() {
echo "" echo ""
fi 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 # Connexions réseau
if command -v nmcli &> /dev/null; then if command -v nmcli &> /dev/null; then
echo "🌐 Connexions réseau configurées:" echo "🌐 Connexions réseau configurées:"
@@ -640,6 +806,7 @@ show_help() {
echo "Ce script sauvegarde et restaure :" echo "Ce script sauvegarde et restaure :"
echo " • Comptes en ligne GNOME (Google, Microsoft, Nextcloud, etc.)" echo " • Comptes en ligne GNOME (Google, Microsoft, Nextcloud, etc.)"
echo " • Configuration Evolution (comptes mail)" echo " • Configuration Evolution (comptes mail)"
echo " • Configuration SSH (clés privées, clés publiques, fichier config)"
echo " • Connexions réseau WiFi/Ethernet" echo " • Connexions réseau WiFi/Ethernet"
echo " • Paramètres de partage réseau" echo " • Paramètres de partage réseau"
echo " • Signets de fichiers réseau" echo " • Signets de fichiers réseau"
@@ -655,9 +822,10 @@ show_help() {
echo " help, -h Afficher cette aide" echo " help, -h Afficher cette aide"
echo "" echo ""
echo "IMPORTANT:" echo "IMPORTANT:"
echo " ⚠ Les mots de passe SONT sauvegardés (non sécurisé)" echo " ⚠ Les mots de passe SONT sauvegardés (non sécurisé)"
echo " ⚠ Protégez absolument vos fichiers de sauvegarde" echo " ⚠ Les clés SSH privées SONT sauvegardées (TRÈS sensible!)"
echo " ⚠ Ne partagez jamais ces sauvegardes" 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 " • Sudo peut être requis pour les connexions système"
echo "" echo ""
echo "Répertoire de sauvegarde: $BACKUP_DIR" echo "Répertoire de sauvegarde: $BACKUP_DIR"
@@ -666,13 +834,13 @@ show_help() {
# Fonction pour afficher le menu principal # Fonction pour afficher le menu principal
show_menu() { show_menu() {
echo "" echo ""
echo "==================================================" echo "=========================================================="
echo " Script de gestion des comptes et réseau GNOME" echo " Script de gestion des comptes, réseau et SSH GNOME"
echo "==================================================" echo "=========================================================="
echo "" echo ""
echo "Choisissez une action:" echo "Choisissez une action:"
echo "1) Sauvegarder les comptes et réseau" echo "1) Sauvegarder les comptes, réseau et SSH"
echo "2) Restaurer les comptes et réseau" echo "2) Restaurer les comptes, réseau et SSH"
echo "3) Lister les sauvegardes" echo "3) Lister les sauvegardes"
echo "4) Nettoyer les anciennes sauvegardes" echo "4) Nettoyer les anciennes sauvegardes"
echo "5) Afficher les comptes/connexions actuels" echo "5) Afficher les comptes/connexions actuels"
@@ -684,7 +852,7 @@ show_menu() {
# Fonction pour demander de continuer # Fonction pour demander de continuer
ask_continue() { ask_continue() {
echo "" echo ""
echo "==================================================" echo "=========================================================="
read -p "Appuyez sur Entrée pour revenir au menu principal..." read -p "Appuyez sur Entrée pour revenir au menu principal..."
echo "" echo ""
} }