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 25/09/2018, à 07:08

BenjiBoy

crontab et rsync

Salut à vous,

je pense que la question a été posée plusieurs fois, j'ai fais une recherche sur google, et sur le forum (si si, promis) et je n'ai pas été satisfait des réponses lorsque j'en ai trouvé.
Voilà ma problématique :

Quotidiennement, je souhaite effectuer 4 opérations :
- Effectuer un rsync d'un appareil télétransmis sur le terrain
- puis effectuer une commande de tri des données (dataselect pour les intimes)
- puis des plot en utilisant un programme python (clb-noise-analysis-master pour les très intimes)
- Puis les pousser sur un FTP.

C'est le rsync qui nous intéresse ici.
Lorsque je lance la commande sur mon compte, ça fonctionne, car les clé dsa ont été introduite sur l'appareil de destination avec "ssh-copy-id, mais lorsque c'est cron qui s'en charge, c'est pas mon compte, et du coup la clé n'est pas valide.

Comment procéder ?

Hors ligne

#2 Le 25/09/2018, à 09:05

BenjiBoy

Re : crontab et rsync

Juste pour info, j'ai trouvé une appli "ssh-crontab" sur gitlab mais j'ai pas encore compris comment l'utiliser...

Hors ligne

#3 Le 25/09/2018, à 10:06

Postmortem

Re : crontab et rsync

Bonjour,

J'ai envi de dire... Et bien lance la commande via la crontab de ton compte ! tongue

Tu edites comment la crontab ?


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

Hors ligne

#4 Le 25/09/2018, à 12:13

Sciensous

Re : crontab et rsync

installe la clef sur le compte qui lance cron ?


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

#5 Le 26/09/2018, à 06:15

BenjiBoy

Re : crontab et rsync

Salut !

@Postmortem : hum, mais ubuntu n'est pas polythéiste, il n'y a qu'un seul cron ? Que tu l'édites depuis ta session, ton compte, ou root, cron is cron. Or lorsque cron voit sur son planning "vas-y faire un rsync, c'est l'heure", ben l'user qu'il utilise, c'est root. Par ailleurs j'ai lu que générer un clé rsa/dsa sur root et l'utiliser comme accès en remote ssh via cron faisait parti des solutions "sales".
J'ai vu beaucoup de gens qui avait ce problème mais aucun de ceux que j'ai lu ne trouvait de solution à ma portée technique.
Et l'éditeur par défaut dans mon bash.rc est nano. Oui j'assume, je préfère nano à vi, na.

@Sciensous : pas sûr d'avoir compris ta remarque. Il faut installer la clé RSA (moi c'est une RSA, parce que.) sur le compte remote, le serveur, pour que ta session locale y ait accès sans mot de passe. En utilisant "ssh-copy-id" c'est ce qui a été fait. Mais cron ne passe pas par "BenjiBoy" il passe par "root" qui n'a pas la même clé RSA, quand bien même elle eut été générée.

Hors ligne

#6 Le 26/09/2018, à 07:18

Postmortem

Re : crontab et rsync

Bonjour,
Et bien tu te trompes.
Chaque utilisateur peut avoir sa crontab.
Si tu es connecté en tant que toto, si tu fais "crontab -e", tu éditeras la crontab de toto, et c'est donc le user toto qui exécutera les scripts.

Édit :
Enfin, pour être plus précis, il n'y a qu'un démon cron, qui tourne sous root, mais chaque user peut avoir sa crontab ; et les scripts de la crontab de toto seront bien lancés en tant que toto.

Dernière modification par Postmortem (Le 26/09/2018, à 07:23)


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

Hors ligne

#7 Le 26/09/2018, à 08:06

bruno

Re : crontab et rsync

+1
Outre la solution proposée par Postmortem, les fichiers crontab du système (/etc/crontab et /etc/cron.d/*) doivent préciser l'utilisateur sous lequel la tâche est exécutée.
(cf man 5 crontab)

BenjiBoy a écrit :

Par ailleurs j'ai lu que générer un clé rsa/dsa* sur root et l'utiliser comme accès en remote ssh via cron faisait parti des solutions "sales".

Ah ? Et pourquoi ?


*J'exclus l'usage de DSA et ECDSA qui sont cassés ; on ne doit utiliser que des clés RSA ou mieux Ed25519

Dernière modification par bruno (Le 26/09/2018, à 08:07)

Hors ligne

#8 Le 26/09/2018, à 21:18

BenjiBoy

Re : crontab et rsync

Ah ok, au temps pour moi !
J'apprends tous les jours avec la communauté.

Peux-tu m'en dire plus sur comment paramétrer mon crontab pour que ce soit par l'utilisateur toto que les tâches s'exécutent ?
Quels fichiers dois-je modifier ?
De quelle manière ?

Et je prends bonne note des clés DSA.

a+

edit : @ Postmortem, en relisant ton edit je viens de comprendre la différence, et pourquoi ça ne fonctionne actuellement pas, sans pour l'instant savoir comment m'y prendre pour y remédier.

Dernière modification par BenjiBoy (Le 26/09/2018, à 21:23)

Hors ligne

#9 Le 26/09/2018, à 21:55

Postmortem

Re : crontab et rsync

Bonsoir,
Pour éditer la crontab de toto, il faut exécuter la commande suivante, en étant connecté en tant que toto bien sûr :

crontab -e

Ça ouvre la crontab de toto. Tu ajoutes ce que tu veux puis tu quittes en sauvegardant.
Dans le cas où ça s'ouvre avec "vi", tu fais ceci, pour ouvrir avec "nano" par exemple :

EDITOR=nano crontab -e

Édit :
Et si toto n'est pas autorisé à utiliser la commande "crontab", il faut ajouter ce user dans le fichier /etc/cron.allow (fichier à mettre à jour en tant que root)

Dernière modification par Postmortem (Le 26/09/2018, à 22:06)


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

Hors ligne

#10 Le 01/10/2018, à 07:15

BenjiBoy

Re : crontab et rsync

Salut Postmortem,

C'est bien par ce moyen que j'ai édité mon crontab (de toto), cependant, à l’exécution de la commande, ce n'est pas toto qui la lance.
Exemple, dans le crontab :

*/1 30 * * * rsync source destination

N'utilisera pas le même user que si, connecté à ma session, je lance à la main "BenjiBoy@BenjiBoy-G1:~$ rsync source destination"
Je crois comprendre que c'est root, mais je n'en suis pas certain.
Du coup la clé RSA n'est pas la bonne. Root n('en a d'ailleurs même pas.

a+

Hors ligne

#11 Le 01/10/2018, à 14:59

Postmortem

Re : crontab et rsync

Bonjour,

Mets ta commande rsync dans un script comme ça :

#!/bin/bash
exec >/tmp/test.log 2>&1
echo $USER
echo $LOGIN
rsync source destination

Et dans la crontab, tu mets :

*/1 30 * * * /chemin/script   # Remplacer par le nom de ton script évidemment !

Après l'exécution, tu auras un fichier /tmp/test.log ; on verra déjà si c'est bien lancé avec le bon user.

Sinon, lorsqu'on exécute un script via crontab, l'environnement est minimal. Je pense qu'il ne trouve pas ta clé ou du moins, celle-ci n'est pas chargée.
Tu as un mot de passe sur ta clé ?
Lorsque tu lances ta commande rsync directement dans un terminal, ta clé est certainement chargée et déverrouillée dans l'agent SSH. Tu peux le voir dans le terminal en tapant :

env | grep SSH_AUTH_SOCK

Ou :

ssh-add -l

Il faudrait donc que la clé soit chargée lors de l'exécution en crontab.

Dernière modification par Postmortem (Le 01/10/2018, à 15:00)


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

Hors ligne

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

BenjiBoy

Re : crontab et rsync

Hello,
j'espère que la fin d'année fut bonne pour vous.
Je me replonge là-dedans.

Donc en fait, mon rsync est déjà à l'intérieur d'un script, car la fonction est générique sur plein de station de mesures.

Résultat des commandes que tu m'as donné :

paf@paf:~ $ ssh-add  -l
Could not open a connection to your authentication agent.
paf@paf:~ $ env | grep SSH
SSH_CONNECTION=192.168.1.1 57730 192.168.1.8 22
SSH_CLIENT=192.168.1.1 57730 22
SSH_TTY=/dev/pts/1

EDIT : précision sur l'ip visible sur les variables, 192.168.1.1 est le routeur 3G derrière lequel se trouve le périphérique ou je dois automatiser le rsync.


je ne comprends toujours pas pourquoi même après avoir exporté ma clé sur paf il me demande la passphrase, qui est vide by the way.

a+

Dernière modification par BenjiBoy (Le 09/01/2019, à 10:24)

Hors ligne

#13 Le 07/02/2020, à 16:23

Eirikr70

Re : crontab et rsync

Bonjour Benji,
Je suis probablement beaucoup moins expert que toi, mais j'ai trouvé en fouillant, la commande ssh-cron, qui me semble répondre à ton besoin. Je la lance au démarrage via Applications au démarrage pour piloter une synchronisation unison. Je te suggère d'aller voir là : ssh-cron

Hors ligne