Actualiser gnome_accounts.sh
This commit is contained in:
@@ -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 "$@"
|
||||
main "$@"
|
||||
|
||||
Reference in New Issue
Block a user