Ich habe einen Cronjob:
0 9 * * * rsync -a mydir remote_machine:
Ich habe dies mit 'crontab -e' installiert. Ich habe einen ssh-Agent ausgeführt, und wenn ich den Befehl rsync selbst ausführen, funktioniert es ohne Benutzerinteraktion oder Kennworteingabe, aber der Cronjob schlägt mit der folgenden Meldung fehl:
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]
warum funktioniert das nicht Ich weiß, dass die Cronjobs mit mir als Benutzer ausgeführt werden (wenn ich '* * * * * touch / tmp / a' besitze, gehe ich davon aus, dass sich der Rsync mit meinem privaten Schlüssel als ich anmeldet ...
Schlüsselbund ist was Sie brauchen! Installieren Sie es einfach und fügen Sie den folgenden Code in Ihrem
.bash_profile
(oder einem gleichwertigen) hinzu:Für config.fish ( 2 ):
Verwenden Sie dann den folgenden Code in Ihrem Skript, um die Umgebungsvariablen von ssh-agent zu laden:
Für Fische:
Wenn Ihr Schlüssel eine Passphrase hat, werden Sie vom Schlüsselbund einmal gefragt (gültig, bis Sie den Computer neu starten oder den ssh-agent beenden).
Hinweis: Der Schlüsselbund generiert auch Code für
csh
undfish
Shells. Ersetzen Sie daher einfach das Suffix "-sh" durch "-csh" oder "-fish".quelle
Ich habe nicht genug Repräsentanten, um die erste Antwort abzustimmen, aber es hat das Problem gelöst, das ich hatte. In Bezug auf ssh-agent ist möglicherweise bereits einer aktiv. Hier ist ein Skript zum Extrahieren von SSH_AGENT_PID & SSH_AUTH_SOCK aus der Umgebung, ohne dass beim Start von ssh-agent zusätzliche Daten gespeichert werden müssen. (Angenommen, Sie haben Perl)
Fügen Sie Folgendes in ein Skript ein. (zum Beispiel findagent.pl)
Fügen Sie in Ihrem Cron-Skript die folgende Zeile hinzu:
eval `{Pfad zum Skript} / findagent.pl`
quelle
Ich nehme an, Sie verwenden die schlüsselbasierte Authentifizierung, um sich beim Remote-Computer zu authentifizieren. Probieren Sie die folgende Zeile aus:
Wobei .ssh / id_rsa der Pfad zu Ihrem privaten Schlüssel ist. Dies ist die genaue Zeile, die ich für meine Backups verwende, und sie funktioniert bei mir immer einwandfrei.
Beste Grüße,
Fabian
quelle
Anstatt den ssh-Agenten zu verwenden, habe ich mein Skript veranlasst, RSYNC_RSH = "ssh -i /home/user/.ssh/id_rsa" zu exportieren, um SSH_AGENT_PID zu deaktivieren und SSH_AUTH_SOCK zu deaktivieren, bevor rsync aufgerufen wird. Durch das Einfügen in RSYNC_RSH anstelle von '-e ...' war es einfach, die verwendete ID-Datei basierend auf dem Host anzupassen.
Hoffe das hilft, B
quelle