j'ai un cronjob:
0 9 * * * rsync -a mydir remote_machine:
j'ai installé cela avec 'crontab -e'. j'ai un ssh-agent en cours d'exécution, et lorsque j'exécute la commande rsync elle-même, elle fonctionne sans aucune interaction utilisateur ou entrée de mot de passe, mais le cronjob échoue avec le message suivant:
Date: Wed, 9 Dec 2009 11:11:00 -0600 (CST)
From: Cron Daemon <me@my_machine.my_domain>
To: me@my_machine.my_domain
Subject: Cron <me@my_machine> rsync -a /home/me/mydir remote_machine:
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,gssapi-with-mic,password).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at /SourceCache/rsync/rsync-35.2/rsync/io.c(452)
[sender=2.6.9]
pourquoi ça ne marche pas? je sais que les cronjobs fonctionnent avec moi en tant qu'utilisateur (si je lance '* * * * * touch / tmp / a' je suis propriétaire du fichier), je suppose donc que rsync se connecte en tant que moi en utilisant ma clé privée ...
porte - clés est ce dont vous avez besoin! Installez-le simplement et ajoutez le code suivant dans votre
.bash_profile
(ou équivalent):Pour config.fish ( 2 ):
Utilisez ensuite le code ci-dessous dans votre script pour charger les variables d'environnement ssh-agent:
Pour le poisson:
Si votre clé a un mot de passe, le trousseau vous demandera une fois (valable jusqu'à ce que vous redémarriez la machine ou tuiez l'agent ssh).
Remarque: le trousseau génère également du code vers
csh
et desfish
shells, il suffit donc de remplacer le suffixe "-sh" par "-csh" ou "-fish".la source
Je n'ai pas assez de représentants pour voter la première réponse, mais cela a résolu le problème que j'avais. En termes de ssh-agent, vous en avez peut-être déjà un en cours d'exécution. Voici un script pour extraire le SSH_AGENT_PID & SSH_AUTH_SOCK de l'environnement sans aucun truc supplémentaire à enregistrer au démarrage de ssh-agent. (Suppose que vous avez perl)
Mettez ce qui suit dans un script. (par exemple findagent.pl)
et à l'intérieur de votre script cron ajoutez la ligne:
eval `{chemin du script} / findagent.pl`
la source
Je suppose que vous utilisez l'authentification par clé pour vous authentifier avec la machine distante. Essayez la ligne ci-dessous:
Où .ssh / id_rsa est le chemin d'accès à votre clé privée. C'est la ligne exacte que j'utilise pour faire mes sauvegardes et cela fonctionne toujours bien pour moi.
Meilleurs voeux,
Fabian
la source
Comme alternative, au lieu d'utiliser l'agent ssh, j'ai fait exporter mon script RSYNC_RSH = "ssh -i /home/user/.ssh/id_rsa" unset SSH_AGENT_PID unset SSH_AUTH_SOCK avant d'appeler rsync. En le plaçant dans RSYNC_RSH au lieu d'utiliser '-e ...', il a été facile d'ajuster le fichier id utilisé en fonction de l'hôte.
J'espère que cela vous aide, B
la source