Cronjob mit Root-Rechten

HokusPokus

HokusPokus

Eroberer
Hallo zusammen.

Ich habe ein Backup-Skript (Shell-Skript) erstellt, das alle relevanten Daten via ssh auf einen Server lädt. Das Skript wird stündlich ausgeführt.
Der Login erfolgt mittels rsa-key, der über ssh-add (ssh-agent) hinzugefügt und verwendet wird.
Soweit so gut.

Das Problem ist, dass Daten aller User gesichert werden sollen, und somit Leserechte für alle Daten erforderlich sind. Das Skript kann also nicht unter meinem üblichen Usernamen ausgeführt werden, sondern sollte als root ausgeführt werden.
Deshalb habe ich das Skript in die Crontab von root eingetragen.

Das Problem: Beim Ausführen als Root wird der rsa-Key nicht geladen, somit ist die Anmeldung auch nicht möglich.
Ich habe nun schon versucht am Anfang des Skripts den ssh-add-Befehl einzubauen und den ssh-agent zu starten, leider erfolglos. Der Befehl kann offensichtlich mangels geöffneter bash nicht gestartet werden.

Mir ist nun schleierhaft wie ich das bewerkstelligen soll, ohne die Dateiberechtigungen zu ändern.

Grüße,

HokusPokus
 
Mahlzeit,

ssh / scp kennen die Option "-i identity_file" das funktioniert natürlich nur solange der Key nicht mit einem Passwort geschützt ist.

mfg
HeadCrash
 
Code:
bash -c ssh-add keyfile && scp ...

Theoretisch sollte das auch funktionieren. Praktisch habe ich es nicht getestet, da ich auch die Lösung von HeadCrash nutzen würde.
 
Die Skriptdatei sieht so aus:

Code:
#!/bin/bash
ssh-agent /bin/bash
ssh-add /root/.ssh/id_root.rsa
rsync -av --progress -e ssh -i /root/.ssh/id_root.rsa /Quellverzeichnis Login-Name:/Zielverzeichnis
echo Synchronisation beendet.

Das Problem:
Wenn ich angemeldet bin und der Befehl in meiner Crontab steht, funktioniert das super.
Wenn ich das aber in die Crontab von root eintrage (der logischerweise nie angemeldet ist), wird das Skript zwar gestartet, die Anmeldung beim entfernten Server ist jedoch nicht möglich, da das Zertifikat nicht gesendet wird.
Wenn ich dann aber wieder von meinem User-Account aus ein Terminal starte, mich als Root anmelde und das Skript "von Hand" starte, läuft es.

Als "normaler" User konnte ich das Skript übrigens auch ausführen ohne jedes Mal die ssh-Befehle (Zeilen 2 und 3 des Skripts) einzubauen. Die sind erst drin, seit ich versuche das Skript in root's Crontab einzubauen.
Bei meinem eigenen Account musste ich die RSA-Datei also nur einmal hinzufügen und den ssh-agent nur einmal starten.

Wie bekomme ich es also hin, dass das System, respektive der Crontab das Skript ausführen kann, ohne dass theoretisch jemand angemeldet ist?
 
Doch!
Du musst SSH_AGENT_PID und SSH_AUTH_SOCK belegen und exportieren, dann geht es.
Gruß zst
 

Ähnliche Themen

Server-Monitoring mit RRDTool

Zurück
Oben