Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 22/09/2019, à 10:12

alex81

Rsync problème insoluble

Bonjour la communauté,

Le problème que je rencontre fait l'objet de nombreuses publication sur la toile mais ces dernières ne m'ont pas permis de réglé mon soucis.

Contexte:
Mise en place d'une réplication avec rsync entre 2 serveurs à l'aide d'une crontab utilisateur.

J'ai configuré l'authentification par clé entre les 2 machines: la commande ssh server_distant fonctionne parfaitement sous le compte toto.

j'ai testé la commande suivante en ligne de commande:

/usr/bin/rsync -e "ssh -i /home/toto/.ssh/id_userver" -az --delete server_distant:/data/nextcloud/root/data/ /mnt/travail/nextcloud/root/data/ --log-file=/home/toto/transfert/nextcloud.log

La synchronisation fonctionne parfaitement pas d'erreur

Si je positionne cette même commande dans la crontab du compte toto, le fichier de log affiche les lignes suivantes:

2019/09/22 10:15:02 [6278] rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
2019/09/22 10:15:02 [6278] rsync error: unexplained error (code 255) at io.c(235) [Receiver=3.1.2]

dans le profil du compte toto j'ai créé le fichier ~/.ssh/config contenant les lignes suivantes (trouvé sur internet):

ServerAliveInterval 5
ServerAliveCountMax 120

Cela n'a rien changé? J'avoue ne plus savoir quoi faire pour régler ce problème d'où mon appel à l'aide.

En attendant, je fais mes sauvegardes à la main mais cela n'est pas pérenne dans le temps.

Je sollicite donc vos connaissances pour m'aider à mettre cette synchronisation en place

Hors ligne

#2 Le 22/09/2019, à 14:01

bruno

Re : Rsync problème insoluble

Bonjour,

Il faut nous montrer ton fichier crontab. N'oublie pas que les variables d'environnement ne sont pas connues d'une tâche cron (shell non connecté et non interactif), en particulier le PATH. Essaie donc avec :

/usr/bin/rsync -e "/usr/bin/ssh -i /home/toto/.ssh/id_userver" …

#3 Le 22/09/2019, à 15:07

alex81

Re : Rsync problème insoluble

Bonjour Bruno et merci,

Je me rends compte que je n'ai pas été suffisamment précis.
la cron contient:

* */6 * * * /home/utilisateur/transfert/transfert.sh

Le fichier transfert.sh contient:

#!/bin/bash
filedate=`date +%y%m%d`

/usr/bin/rsync -e "ssh -i /home/utilisateur/.ssh/id_userver" -az --delete www.familleblav.ovh:/data/nextcloud/root/data/ /mnt/travail/nextcloud/root/data/ --log-file=/home/utilisateur/transfert/nextcloud.log && mail -s "Log sauvegarde nextcloud: ${filedate}" alexandrebeaujault.travail@gmail.com < /home/utilisateur/transfert/nextcloud.log

je viens de tester en modifiant la syntaxe avec ta suggestion:
transfert.sh

#!/bin/bash
filedate=`date +%y%m%d`

/usr/bin/rsync -e "/usr/bin/ssh -i /home/utilisateur/.ssh/id_userver" -az --delete www.familleblav.ovh:/data/nextcloud/root/data/ /mnt/travail/nextcloud/root/data/ --log-file=/home/utilisateur/transfert/nextcloud.log && mail -s "Log sauvegarde nextcloud: ${filedate}" alexandrebeaujault.travail@gmail.com < /home/utilisateur/transfert/nextcloud.log

Le contenu du fichier de log:

2019/09/22 16:05:03 [9987] rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
2019/09/22 16:05:03 [9987] rsync error: unexplained error (code 255) at io.c(235) [Receiver=3.1.2]

Hors ligne

#4 Le 22/09/2019, à 15:35

bruno

Re : Rsync problème insoluble

Il manque l'utilisateur pour le serveur distant :

rsync -az --delete -e 'ssh -i /home/toto/.ssh/id_key' toto@serveur_sitant:/emplcement/a/sauvegarder /emplacment/de/la/sauvegarde

Dernière modification par bruno (Le 22/09/2019, à 15:35)

#5 Le 22/09/2019, à 17:02

alex81

Re : Rsync problème insoluble

A force de tester dans tous les sens, j'avais oublié que je l'avais viré. Je viens de le remettre mets lors de l’exécution suivante du cron j'ai toujours le même résultat

Un autre idée?

Hors ligne

#6 Le 23/09/2019, à 06:45

Postmortem

Re : Rsync problème insoluble

Salut,
Question bête mais ta clef privée demande-t-elle un mot de passe ?


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#7 Le 23/09/2019, à 08:19

alex81

Re : Rsync problème insoluble

Bonjour et merci,

Effectivement toutes mes clés privées utilise une passphrase. Je n'ai jamais fait le rapprochement car quand je me connecte en ssh directement je n'ai pas de soucis.
Est-il possible que la passphrase soit stocker à un endroit non accessible à cron?

Hors ligne

#8 Le 23/09/2019, à 09:32

bruno

Re : Rsync problème insoluble

Relis le #2 : une tâche cron est dans un shell non interactif, non connecté. Il ne peut absolument pas connaître la phrase de passe (enregistrée par ssh-agent) ni laisser la possibilité de la saisir.
Je n'y ai même pas pensé car on utilise généralement une clé privée sans mot de passe pour ce genre de tâche. Le plus simple est de supprimer cette phrase de passe de ta clé.

#9 Le 23/09/2019, à 09:57

Postmortem

Re : Rsync problème insoluble

Il me semble que l'on peut utiliser une clé avec une passphrase.
Pour cela, il faut charger la clé à chaque fois que le serveur est redémarré (et donc là tu rentres la passphrase) via la commande ssh-add.
Puis mettre au début de ton script transfert.sh :
eval $(ssh-agent)
Je ne suis pas certain de moi par contre ! (en effet, c'est pas bon !)

Edit :
Puis à la fin de ton script, tu rajoutes ceci pour ne pas avoir 50 process ssh-agent après 50 lancements du script :
ssh-agent -k

Re-edit :

En fait, je me suis trompé.

Il faut que tu aies ssh-agent chargé au démarrage de ton serveur (soit automatiquement, soit tu le lances toi-même), puis tu ajoutes la clé via ssh-add (c'est là que tu rentreras la passphrase).

Ensuite, tu fais ceci :

export | grep SSH >/home/utilisateur/transfert/agent_SSH

Le fichier /home/utilisateur/transfert/agent_SSH devrait donc contenir un truc dans ce gout là :

$ cat /home/utilisateur/transfert/agent_SSH
declare -x SSH_AGENT_PID="23131"
declare -x SSH_AUTH_SOCK="/tmp/ssh-CwCgZGxnqdJw/agent.23130"

Puis, au début de ton script /home/utilisateur/transfert/transfert.sh, tu mets ceci :

. /home/utilisateur/transfert/agent_SSH

Dernière modification par Postmortem (Le 23/09/2019, à 11:05)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#10 Le 23/09/2019, à 11:05

Postmortem

Re : Rsync problème insoluble

J'ai corrigé mon précédent post.


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#11 Le 23/09/2019, à 12:11

alex81

Re : Rsync problème insoluble

Merci,

je vais voir si je peux me connecter au serveur afin de configurer cela, je te fais signe.

Hors ligne

#12 Le 23/09/2019, à 12:33

Postmortem

Re : Rsync problème insoluble

Pardon, c'est coté client que tu fois faire ça ; sur le PC qui héberge ton script et où se trouve ta clé privée.


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#13 Le 23/09/2019, à 13:19

bruno

Re : Rsync problème insoluble

Intéressant comme méthode mais cela ne fonctionne que si l'utilisateur est connecté à sa session. Encore une fois il est beaucoup plus simple et plus pratique de supprimer la phrase de passe (ssh-keygen -p).

#14 Le 23/09/2019, à 13:51

alex81

Re : Rsync problème insoluble

Re,

J'ai pu tester de créer une nouvelle clé sans passphrase. J'ai modifié le script transfert.sh pour qu'il s'authentifie avec la nouvelle clé et le transfert c'est bien passé sans erreur.

Mon serveur externe (celui vers lequel je me connecte) est verrouillé  firewall, fail2ban ...

Je pense donc que je vais garder l'idée de virer la passphrase

Merci à tous.

Hors ligne

#15 Le 23/09/2019, à 15:14

Postmortem

Re : Rsync problème insoluble

bruno a écrit :

Intéressant comme méthode mais cela ne fonctionne que si l'utilisateur est connecté à sa session. Encore une fois il est beaucoup plus simple et plus pratique de supprimer la phrase de passe (ssh-keygen -p).

Non non, pas besoin que l'utilisateur soit connecté à sa session.
Je suis sous Ubuntu 18.04. Si j'utilise le process ssh-agent qui dépend de gnome-keyring-daemon, en effet, dès que je me délogue, ça ne fonctionne plus.
Mais si on lance un autre ssh-agent, ça fonctionne.
Ce que j'ai fait :

$ eval $(ssh-agent -a /home/Postmortem/agent_SSH)
Agent pid 2415

$ ssh-add
Enter passphrase for /home/Postmortem/.ssh/id_rsa: 
Identity added: /home/Postmortem/.ssh/id_rsa (/home/Postmortem/.ssh/id_rsa)

Puis dans le script planifié en crontab, il suffit de rajouter au début :

export SSH_AUTH_SOCK=/home/Postmortem/agent_SSH

J'ai planifié le script dans la crontab pour s'exécuter 2 mn plus tard et je me suis délogué.
Le script s'est bien exécuté et a bien pu aller exécuter un script sur un serveur distant via ssh.

Faut juste penser à charger sa clé lorsqu'on redémarre le PC client via « eval $(ssh-agent -a /home/Postmortem/agent_SSH) » et « ssh-add »


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne