floss:bash_scripts

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
floss:bash_scripts [2023/05/24 14:27] villersdfloss:bash_scripts [2023/05/31 13:24] (Version actuelle) – [Script bash de backup] villersd
Ligne 8: Ligne 8:
 ===== Script bash de backup ===== ===== Script bash de backup =====
  
-  * Question via [[https://chat.openai.com|ChatGPT]] : "Je souhaite disposer d'un script bash de backup pour sauvegarder une copie complète compressée d'un répertoire sous Ubuntu dans un répertoire dédié aux backups. Le script doit également effacer les backups antérieurs dès qu'ils sont plus vieux que 10 jours. Par contre, le backup de chaque premier jour du mois doit être déplacé vers un répertoire d'un autre nom."+  * Question via [[https://chat.openai.com|ChatGPT]] : **"Je souhaite disposer d'un script bash de backup pour sauvegarder une copie complète compressée d'un répertoire sous Ubuntu dans un répertoire dédié aux backups. Le script doit également effacer les backups antérieurs dès qu'ils sont plus vieux que 10 jours. Par contre, le backup de chaque premier jour du mois doit être déplacé vers un répertoire d'un autre nom."**
   * Réponse :   * Réponse :
  
 Voici un exemple de script bash qui répond à vos exigences pour la sauvegarde et la suppression des backups antérieurs : Voici un exemple de script bash qui répond à vos exigences pour la sauvegarde et la suppression des backups antérieurs :
  
-<code bash>+<code bash backup.sh>
 #!/bin/bash #!/bin/bash
  
Ligne 40: Ligne 40:
 # Supprimer le répertoire non compressé # Supprimer le répertoire non compressé
 rm -rf "$backup_directory/$backup_folder" rm -rf "$backup_directory/$backup_folder"
 +
 +# copie vers un serveur distant
 +rsync -e "ssh -i /home/villersd/.ssh/id_rsa" "$backup_directory/$backup_folder.tar.gz" villersd@linus.umons.ac.be:/home/villersd/backup_sdds
  
 # Déplacer la sauvegarde mensuelle du premier jour du mois vers le répertoire mensuel # Déplacer la sauvegarde mensuelle du premier jour du mois vers le répertoire mensuel
Ligne 67: Ligne 70:
 N'oubliez pas d'adapter le script en fonction de vos besoins spécifiques et de tester attentivement avant de l'utiliser en production. N'oubliez pas d'adapter le script en fonction de vos besoins spécifiques et de tester attentivement avant de l'utiliser en production.
  
-  * Question complémentaire : "Je souhaite placer aussi le backup effectué chaque 15 du mois. Je suppose qu'il suffit de rajouter une combinaison logique "ou" avec le test [ "$(date +%d)" = "15" ]. Pouvez-vous me donner la ligne complète correcte ?"+  * Question complémentaire : **"Je souhaite placer aussi le backup effectué chaque 15 du mois. Je suppose qu'il suffit de rajouter une combinaison logique "ou" avec le test [ "$(date +%d)" = "15" ]. Pouvez-vous me donner la ligne complète correcte ?"**
  
 Oui, vous pouvez ajouter une condition supplémentaire pour le 15 du mois en utilisant l'opérateur logique "||" (ou). Voici la ligne complète modifiée : Oui, vous pouvez ajouter une condition supplémentaire pour le 15 du mois en utilisant l'opérateur logique "||" (ou). Voici la ligne complète modifiée :
Ligne 76: Ligne 79:
  
 Avec cette modification, la sauvegarde sera déplacée vers le répertoire mensuel à la fois le premier jour et le quinzième jour de chaque mois. Avec cette modification, la sauvegarde sera déplacée vers le répertoire mensuel à la fois le premier jour et le quinzième jour de chaque mois.
 +
 +  * Question complémentaire : **"Lorsque le fichier de sauvegarde compressé est obtenu, et avant de considérer son déplacement éventuel vers le répertoire de backups mensuels, je souhaite copier ce fichier par rsync vers un serveur distant. Comment configurer de manière efficace et en respectant les règles de sécurité les clés SSH sur le serveur sauvegardé et le serveur distant, en fonction des utilisateurs (local et distant) ? Merci."**
 +
 +<note tip>cette copie vers un répertoire distant a été intégrée au script présenté auparavant !</note>
 +
 +Pour configurer efficacement et en respectant les règles de sécurité les clés SSH entre le serveur local (où se trouve le script de sauvegarde) et le serveur distant, vous pouvez suivre ces étapes :
 +
 +  - Génération des clés SSH sur le serveur local :
 +    * Connectez-vous au serveur local en tant qu'utilisateur souhaité (par exemple, utilisateur_local).
 +    * Ouvrez un terminal et exécutez la commande suivante pour générer une paire de clés SSH : <code>ssh-keygen -t rsa -b 4096</code>
 +    * Vous pouvez appuyer sur Entrée pour accepter l'emplacement et le nom de fichier par défaut pour la clé.
 +    * Vous serez invité à entrer une phrase de passe optionnelle pour protéger votre clé privée. Il est recommandé d'en utiliser une pour renforcer la sécurité.
 +  - Ajout de la clé publique sur le serveur distant :
 +    * Copiez la clé publique générée sur le serveur local vers le serveur distant en utilisant la commande suivante : <code>ssh-copy-id -i ~/.ssh/id_rsa.pub utilisateur_distant@adresse_du_serveur</code>
 +    * Remplacez utilisateur_distant par le nom de l'utilisateur sur le serveur distant et adresse_du_serveur par l'adresse IP ou le nom d'hôte du serveur distant.
 +    * Vous serez invité à entrer le mot de passe de l'utilisateur distant. Entrez-le pour autoriser la copie de la clé publique.
 +  - Vérification de la connexion SSH sans mot de passe :
 +    * Essayez de vous connecter au serveur distant à partir du serveur local en utilisant la commande suivante : <code>ssh utilisateur_distant@adresse_du_serveur</code>
 +    * Si tout est configuré correctement, vous devriez vous connecter au serveur distant sans être invité à entrer un mot de passe.
 +  - Utilisation de rsync avec la clé SSH :
 +    * Pour utiliser rsync avec la clé SSH pour copier le fichier de sauvegarde vers le serveur distant, vous pouvez utiliser la commande suivante dans votre script de sauvegarde : <code>rsync -e "ssh -i /chemin/vers/clé_privée" fichier_sauvegarde utilisateur_distant@adresse_du_serveur:/chemin/destination</code>
 +    * Remplacez /chemin/vers/clé_privée par le chemin complet vers votre clé privée générée précédemment, fichier_sauvegarde par le nom du fichier de sauvegarde compressé et /chemin/destination par le répertoire de destination sur le serveur distant.
 +
 +Veillez à protéger vos clés privées en les gardant sécurisées et en leur accordant des permissions appropriées (par exemple, en utilisant chmod 600). De plus, assurez-vous que les utilisateurs locaux et distants disposent des droits appropriés pour accéder aux fichiers et répertoires nécessaires.
 +
 +Ces étapes vous permettront de configurer une connexion SSH sécurisée entre le serveur local et le serveur distant, en utilisant des clés SSH pour l'authentification sans mot de passe lors de l'utilisation de rsync.
 +
 +  * Question complémentaire : **"Quels sont les rôles des options -e de rsync, et -i de ssh ?"**
 +
 +Les options -e de rsync et -i de ssh ont les rôles suivants :
 +
 +  - Option -e de rsync :
 +    * L'option -e de rsync permet de spécifier la commande à utiliser pour établir la connexion SSH entre le client rsync (le serveur local) et le serveur distant. Elle permet de définir l'interpréteur de shell ou le programme d'accès distant à utiliser. Par défaut, rsync utilise ssh comme protocole de transfert sécurisé, mais vous pouvez utiliser l'option -e pour spécifier d'autres programmes si nécessaire.
 +    * Par exemple, pour utiliser ssh comme protocole de transfert sécurisé, vous pouvez utiliser <code>-e "ssh"</code> dans votre commande rsync. Si vous avez besoin de spécifier un fichier de clé privée SSH, vous pouvez utiliser <code>-e "ssh -i /chemin/vers/clé_privée"</code>
 +  - Option -i de ssh :
 +    * L'option -i de ssh permet de spécifier le chemin vers le fichier de clé privée à utiliser pour l'authentification SSH. Lorsque vous vous connectez à un serveur distant, ssh utilise par défaut la clé privée située dans ~/.ssh/id_rsa. L'option -i permet de spécifier une autre clé privée si vous en avez généré une ou si vous souhaitez utiliser une clé différente.
 +    * Par exemple, vous pouvez utiliser <code>-i /chemin/vers/clé_privée</code> pour spécifier le chemin complet vers votre clé privée lors de l'utilisation de ssh.
 +
 +En combinant ces deux options, vous pouvez utiliser rsync avec une connexion SSH sécurisée en spécifiant la commande ssh à utiliser avec l'option -e et en spécifiant la clé privée à utiliser avec l'option -i.
 +
 +==== Crontab pour ce script ====
 +
 +  * → remplacer l'utilisateur "user00" dans la suite
 +  * ajout de root, user00 dans /etc/cron.allow
 +  * Backup à 04h25 chaque jour sur l'utilisateur user00, (sudo crontab -u user00 -e après être connecté sur cet utilisateur) : 25 4 * * * /home/user00/backups/backup.sh
 +  * Le script bash backup.sh doit être exécutable. Après sa création, il faudra exécuter "chmod +x backup.sh"
 +  * doc :
 +    * [[https://doc.ubuntu-fr.org/cron]]
 +    * [[https://linux-sys-adm.com/how-to-create-script-for-backup-and-use-crontab-on-ubuntu-server-14.04-lts-step-by-step/]]
 +    * [[https://guide.ubuntu-fr.org/server/backup-shellscripts.html]]
 +  * Création d'un lien symbolique pour un répertoire sur un media amovible :
 +    * ln -s /media/usb/sauvegardes ~/sauvegardes
 +
  • floss/bash_scripts.1684931275.txt.gz
  • Dernière modification : 2023/05/24 14:27
  • de villersd