automatiser rsync -a S(1,2)/ user@adresse:D(1,2) Le sujet est résolu

Tout ce qui concerne la programmation.
Répondre
tony
Membre
Membre
Messages : 183
Inscription : 10 juil. 2023, 00:54
Status : Hors-ligne

salut ,

j'utilise souvent SSH pour mettre à jour mes sauvegardes distantes sur 2 supports physiques différents . De plus j'aimerais bien n'utiliser qu'une seule "passphrase" par support . En ne considérant , pour débuter , que les 2 sauvegardes les plus fréquentes je vois 2 une solution dont seule la 1ère correspond à ce forum , mais une opinion sur la faisabilité de la méthode 1 serait la bienvenue .
  • 1ère méthode : utiliser midnight commander avec l'option Lien Shell
mais pour le moment je ne vois pas comment réaliser cette opération .
  • 2ème méthode : utiliser une structure de contrôle while
. Comme je ne dispose pas de bac à sable je préfère demander un avis pour éventuellement corriger mon fichier shell où S et D signifient Source et Destination :

Code : Tout sélectionner

#!/bin/bash
# rsync1 [vers support 1]

while rsync -a S1/ user@adresse:D1 --delete-after
do
rsync -a S2/ user@adresse:D2 --delete-after

rm fichier_inexistant  
[if [ $? -eq 1 ]; then
        break
fi] [ ] rajouté

done
idem pour le script # rsync2 pour le support 2

ps1 : en y réfléchissant je me dis que ce script va consister à entrer 2 commandes indépendantes et qu'en conséquence il me demandera 2 fois la passphrase , non ? Je n'économiserais alors que l'écriture des commandes elles-même , ce qui est quand même un début .

ps2 : peut-être ceci ( modification de https://fr.linux-console.net/?p=15959 ) :

Code : Tout sélectionner

for d in S1/  S2/
do 
rsync -a S1/ user@adresse:D1 $d
done
Debian 11 / Xfce
tony
Membre
Membre
Messages : 183
Inscription : 10 juil. 2023, 00:54
Status : Hors-ligne

ps3 : après avoir testé hors SSH et sans succès les 2 scripts ci-dessus j'ai tout simplement exécuté les 2 commandes l'une après l'autre car de toute façon il me faudra entrer 2 fois la passephrase . Pourquoi faire simple quand on peut faire compliqué ? Mais ce qui me gêne c'est que je n'ai pas compris comment s'arrête la commande while --> avec [ ] la commande while s'arrête .

Code : Tout sélectionner

#!/bin/bash
# rsync1 [vers support 1]

 rsync -a S1/ D1 --delete-after  &&  rsync -a S2/ D2 --delete-after
je vais quand même essayer de comprendre pourquoi ma commande for ne fonctionne pas car elle aurait peut-être été une solution pour éviter de remettre la passphrase . . Quant aux 3 destinations associées à 3 sources différentes que j'utilise habituellement le plus simple est bien d'utiliser && . Quant à la passphrase , à moins d'utiliser des techniques spéciales , c'est sans espoir .
Debian 11 / Xfce
Avatar de l’utilisateur
lol
Site Admin
Site Admin
Messages : 4974
Inscription : 04 avr. 2016, 12:11
Localisation : Madagascar
Status : Hors-ligne

Salut,

Je ne suis pas capable de t'aider sur la partie while, mais j'ai une question:

A partir du moment ou tu parles d'automatiser des connexion SSH, une clef sans "passphrase" semble tout de même être le must..
Pourquoi te mettre cette contrainte ?
Si la machine à partir de laquelle tu lance le script est un minimum sécurisée tu ne risque pas grand chose.

J’imagine aussi que tu pourrais stocker ta "passphrase" dans une variable $1 passée en argument au lancement du script (Ou mieux un read), et utiliser sshpass avec l'option -P

Du genre:

Code : Tout sélectionner

sshpass -P$1 ssh user@ip
Je n'ai pas de clef avec "passphrase" je ne peux donc pas vérifier ma commande...
Le read évite d’enregistrer la commande avec la passphrase dans ton bash_history. C'est évidemment mieux. :smile:
Règles d'usage du forum. Signalez si vous avez posté votre question sur un autre forum. Explications ici
Debian Unstable. Mate/LXQT. Dieu, en créant l'homme, a quelque peu surestimé ses capacités.
tony
Membre
Membre
Messages : 183
Inscription : 10 juil. 2023, 00:54
Status : Hors-ligne

lol a écrit : 20 janv. 2024, 06:48 Salut,

Je ne suis pas capable de t'aider sur la partie while, mais j'ai une question:

A partir du moment ou tu parles d'automatiser des connexion SSH, une clef sans "passphrase" semble tout de même être le must..
Pourquoi te mettre cette contrainte ?
Si la machine à partir de laquelle tu lance le script est un minimum sécurisée tu ne risque pas grand chose.
.............
je vais me pencher là-dessus car répéter 3 fois la même passphrase chaque fois sur je fais ces 3 sauvegardes de base c'est un peu répétitif . Je suis encore très loin de comprendre tous les aspects sécuritaires , alors j'essaie de blinder . Merci pour la remarque .

Quant à la commande while utilisée dans cette configuration je pense avoir compris mon erreur . Je n'ai qu'à suivre la traduction littérale : tant que cmd1 faire cmd2 cmd3... . C''est donc la valeur de retour de cmd1 qui doit arrêter la boucle et non "une" valeur d'une commande , ce qui dans mon cas ne peut pas fonctionner . Il faut donc l'arrêter autrement et c'est le but de l'astuce ci-dessus que j'ai évidemment trouvée sur internet . J'ai voulu me lancer dans une solution de type script pour savoir comment ça fonctionne , c'est au moins ça de vu .
Debian 11 / Xfce
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 4962
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : En ligne

Lorsque je veux enchaîner des commandes, j'ai un petit pense bete (désolé, il est en anglais)

Code : Tout sélectionner


    "A ; B" Run A and then B, regardless of success of A
    "A && B" Run B if A succeeded
    "A || B" Run B if A failed
    "A &" Run A in background.
tony
Membre
Membre
Messages : 183
Inscription : 10 juil. 2023, 00:54
Status : Hors-ligne

piratebab a écrit : 20 janv. 2024, 09:14 Lorsque je veux enchaîner des commandes, j'ai un petit pense bete (désolé, il est en anglais)

Code : Tout sélectionner


    "A ; B" Run A and then B, regardless of success of A
    "A && B" Run B if A succeeded
    "A || B" Run B if A failed
    "A &" Run A in background.
j'avais oublié la différence entre les opérateurs && et ; . Inutile d'arrêter une sauvegarde si l'une des 3 commandes ne fonctionne pas , je vais donc remplacer les && par des points-virgules . Par contre je ne connaissais pas les 2 derniers opérateurs .
Debian 11 / Xfce
Avatar de l’utilisateur
diesel
Membre
Membre
Messages : 161
Inscription : 29 oct. 2022, 22:43
Status : Hors-ligne

J'ai toujours pas compris ton histoire de "passphrase".

Quel est le logiciel qui te demande cette "passphrase" ? rsync, ssh, autre ?

Amicalement.

Jean-Marie
tony
Membre
Membre
Messages : 183
Inscription : 10 juil. 2023, 00:54
Status : Hors-ligne

diesel a écrit : 20 janv. 2024, 11:20 J'ai toujours pas compris ton histoire de "passphrase".

Quel est le logiciel qui te demande cette "passphrase" ? rsync, ssh, autre ?

Amicalement.

Jean-Marie
tout d'abord le fichier shell utilisé :

Code : Tout sélectionner

#!/bin/bash
# rsync1 

rsync -a  .mozilla/ mi@192.168.1.21:.mozilla --delete-after; 
rsync -a .thunderbird/ mi@192.168.1.21:.thunderbird --delete-after; 
rsync -a Documents/ mi@192.168.1.21:Documents  --delete-after

à chaque commande , sauf la 1ère je suppose car elle intervient juste après la connexion qui a nécessité une passphrase , passée en utilisant SSH ( machine distante ) une passphrase est demandée pour sécuriser la connexion . Comme le script comprend 3 commandes rsync , dont les destinations sont différentes , à exécuter il me demande 3 fois la passphrase (cf plus bas) :

Code : Tout sélectionner

~$ rsync1
Debian GNU/Linux 12
Enter passphrase for key '/home/mm/.ssh/id_rsa': 
Debian GNU/Linux 12
Enter passphrase for key '/home/mm/.ssh/id_rsa': 
Debian GNU/Linux 12
Enter passphrase for key '/home/mm/.ssh/id_rsa':
sans en être sûr je pense que après chaque commande la connexion se ferme et il faut donc la rouvrir = ?
  • la 1ère demande est pour effectuer la liaison SSH et aussi la 1ère destination D1 correspondant à la source S1/
  • la 2ème demande est nécessaire car j'exécute une autre commande qui change de source et de destination : S2/ > D2 tout en restant dans SSH
  • la 3ème demande correspond à une 3ème commande avec S3/ > D3
Pour le nombre de commandes à utiliser je me base sur ceci , issu de https://fr.linux-console.net/?p=15959 :
Comment rsynchroniser vers plusieurs destinations

La réponse à rsync fournit une méthode ou des options pour transférer des fichiers vers plusieurs destinations, ou non, est courte NON. Il n'existe aucune méthode disponible pour fournir plusieurs destinations à la commande rsync. Rsync ne fonctionne que de point à point.
Mais ça n'est quand même pas très clair dans mon esprit .
Debian 11 / Xfce
Avatar de l’utilisateur
diesel
Membre
Membre
Messages : 161
Inscription : 29 oct. 2022, 22:43
Status : Hors-ligne

Si tu veux n'avoir qu'une fois (par cible (machine) distante) la passphrase à entrer, je te suggère un montage nfs dans un tunnel ssh (si tu veux chiffrer tes transferts rsync).

Amicalement.

Jean-Marie
tony
Membre
Membre
Messages : 183
Inscription : 10 juil. 2023, 00:54
Status : Hors-ligne

  • j'ai regardé la solution avec sshpass : elle a un inconvénient car lorsque j'utilise SSH pour de la maintenance sur le support 1 ( ssd avec debian 12 autonome ) la connexion passe obligatoirement par du wifi ( idem pour les sauvegardes ) et j'ai lu ici-même que 99% des problèmes de sécurité étaient liés au wifi . Comme je n'ai pas trouvé le moyen de changer facilement le mode d'authentification puisqu'il est fixé dans le fichier de configuration je vais rester avec ma phrase-passe . Ce sera quand même une semi-automatisation pour le support 1 de type ssd et une automatisation complète pour le support 2 = clé usb branchée directement sur mon portable et qui n'a pas l'air de changer de chemin d'accès.
  • la solution nfs + tunnel ssh n'est pas simple et trop évoluée pour réaliser seulement 3 sauvegardes


merci à tous les intervenants .
Debian 11 / Xfce
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 4962
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : En ligne

Tu mélange plusieurs concept.
Ce qui est dangereux, c'est de faire transiter des informations en clair.
Avec ssh, rien ne transite en clair, surtout pas les clefs!
tony
Membre
Membre
Messages : 183
Inscription : 10 juil. 2023, 00:54
Status : Hors-ligne

lol a écrit : 20 janv. 2024, 06:48 A partir du moment ou tu parles d'automatiser des connexion SSH, une clef sans "passphrase" semble tout de même être le must..
j'ai repris ce problème en regardant les possibilités de la commande sshpass à partir du manuel :
NAME
sshpass - noninteractive ssh password provider
Donc , si je comprends bien il me faut passer de l'authentification par paire de clés à une authentification par mot de passe . Je viens de modifier mon fichier shell en ajoutant simplement devant chaque commande sshpass -f mdp et à la fin rm mdpmdp est un fichier où j'écris le mot de passe avant chaque sauvegarde . Ça fonctionne très bien .

Pour avoir une automatisation complète je bute sur l'écueil suivant : comment stocker un mot de passe de manière sécurisée sans passer par un fichier root puisque l'utilisateur doit pouvoir le lire et qu'une connection ssh en root n'est pas recommandée ( d'après ce que j'ai lu ) .
Debian 11 / Xfce
Avatar de l’utilisateur
lol
Site Admin
Site Admin
Messages : 4974
Inscription : 04 avr. 2016, 12:11
Localisation : Madagascar
Status : Hors-ligne

Salut,
tony a écrit : 27 janv. 2024, 14:44 ...
Pour avoir une automatisation complète je bute sur l'écueil suivant : comment stocker un mot de passe de manière sécurisée sans passer par un fichier root puisque l'utilisateur doit pouvoir le lire et qu'une connection ssh en root n'est pas recommandée ( d'après ce que j'ai lu ) .

Génère de nouvelles clefs ssh SANS mot de passe. :wink:
Règles d'usage du forum. Signalez si vous avez posté votre question sur un autre forum. Explications ici
Debian Unstable. Mate/LXQT. Dieu, en créant l'homme, a quelque peu surestimé ses capacités.
tony
Membre
Membre
Messages : 183
Inscription : 10 juil. 2023, 00:54
Status : Hors-ligne

lol a écrit : 27 janv. 2024, 14:50 Salut,
tony a écrit : 27 janv. 2024, 14:44 ...
Pour avoir une automatisation complète je bute sur l'écueil suivant : comment stocker un mot de passe de manière sécurisée sans passer par un fichier root puisque l'utilisateur doit pouvoir le lire et qu'une connection ssh en root n'est pas recommandée ( d'après ce que j'ai lu ) .

Génère de nouvelles clefs ssh SANS mot de passe. :wink:
après avoir corrigé mes bêtises j'ai donc enlevé la phrase-passe à l'aide ssh-keygen -p ce qui m'a permis de garder les anciennes clés . Tout est Ok maintenant .

merci pour les conseils.
Debian 11 / Xfce
Avatar de l’utilisateur
lol
Site Admin
Site Admin
Messages : 4974
Inscription : 04 avr. 2016, 12:11
Localisation : Madagascar
Status : Hors-ligne

tony a écrit : 27 janv. 2024, 17:28
lol a écrit : 27 janv. 2024, 14:50 Salut,
tony a écrit : 27 janv. 2024, 14:44 ...
Pour avoir une automatisation complète je bute sur l'écueil suivant : comment stocker un mot de passe de manière sécurisée sans passer par un fichier root puisque l'utilisateur doit pouvoir le lire et qu'une connection ssh en root n'est pas recommandée ( d'après ce que j'ai lu ) .

Génère de nouvelles clefs ssh SANS mot de passe. :wink:
après avoir corrigé mes bêtises j'ai donc enlevé la phrase-passe à l'aide ssh-keygen -p ce qui m'a permis de garder les anciennes clés . Tout est Ok maintenant .

merci pour les conseils.
:good:
Règles d'usage du forum. Signalez si vous avez posté votre question sur un autre forum. Explications ici
Debian Unstable. Mate/LXQT. Dieu, en créant l'homme, a quelque peu surestimé ses capacités.
Répondre