Exécuter un cronjob en arrière-plan
Ok, vous avez plusieurs options.
Ceux qui précèdent sont assez bons lorsqu'il s'agit de rsync en tant qu'utilisateur normal avec des permissions sudo sur le(s) côté(s) opposé(s).
J'ai eu le même problème, à la seule différence que je voulais l'exécuter en tant que cronjob la nuit.
Étape 1
Je travaille avec clés ssh (cela permet de se connecter à un hôte distant sans authentification par mot de passe tout en étant très sûr !)
-
Créez une clé ssh sur votre ordinateur source (serveur) à l'aide de la commande suivante :
ssh-keygen
Quelques options vous seront proposées, il vous suffit d'appuyer sur la touche Entrée à chaque fois (n'entrez pas de mot de passe !!).
Cette commande crée deux clés différentes. 1. Une clé id_rsa_pub : cette clé doit être copiée sur l'hôte distant (serveur de destination). 2. Une clé id_rsa : il s'agit d'une clé privée que vous ne devez pas manipuler. Assurez-vous que personne ne peut voir cette clé (permissions de lecture). Vous seul devez avoir le droit de voir cette clé.
Étape 2
-
Une fois les clés générées, il est temps de copier la clé id_rsa_pub sur l'ordinateur distant (serveur). Vous pouvez le faire à l'aide de la commande suivante :
ssh-copy-id user@remoteserver.example
Il vous sera demandé de saisir votre mot de passe pour l'accès ssh par défaut. Entrez simplement votre mot de passe et la commande ssh-copy-id fera le reste pour vous.
Le temps de tester
- Maintenant, connectez-vous au serveur distant (la destination que vous avez utilisée avec la commande ssh-copy-id).
Vous pouvez considérer que le test est réussi si vous n'êtes pas invité à entrer un mot de passe.
Vous pouvez maintenant effectuer des commandes rsync vers un hôte distant sans avoir à saisir un mot de passe à chaque fois ! De plus, il est possible de faire de l'autocomplétion sur l'hôte de destination à partir de l'hôte source. C'est plutôt sympa si vous voulez mon avis (exemple ssh 192.168.1.100 : "press two time the tab button to autocomplete the rest of the command. Notez que l'adresse IP 192.168.1.100 est l'adresse IP du serveur de destination).
Vous pouvez maintenant effectuer une commande rsync à partir d'un cronjob avec un utilisateur "sudo" normal (il n'est pas nécessaire d'avoir un accès root sur les deux serveurs pour ssh afin d'utiliser l'utilisateur root).
Il suffit de faire la même chose que ce qui est décrit ci-dessus, mais d'ajouter une option :
sudo rsync --rsync-path="sudo rsync" -az --delete -e "ssh -p 1022 -l **buser** -i /home/**buser**/.ssh/id_rsa" /path/to/rsync user@destinationserver.example:
Notez que buser (BackupUSER, est mon utilisateur qui utilise la clé ssh pour se connecter via ssh sans être invité à entrer un mot de passe). Changer buser à votre nom d'utilisateur qui utilise la méthode de connexion ssh-key.
Notez que le dernier caractère de la commande se termine par un " :" Cela signifie que vous copiez des fichiers dans le dossier personnel de l'utilisateur distant. Si vous souhaitez dévier vers un autre emplacement que votre répertoire personnel, vous pouvez le faire en ajoutant le chemin d'accès absolu après l'attribut " :" Par exemple :
sudo rsync --rsync-path="sudo rsync" -az --delete -e "ssh -p 1022 -l **buser** -i /home/**buser**/.ssh/id_rsa" /path/to/rsync user@destinationserver.example:/srv/backup_folder
Explication de l'option "ssh -p 1022 -l username -i /home/username/.ssh/id_rsa"
ssh -p 1022 ssh utilise le port 22 par défaut. Je m'écarte du port par défaut parce que mon serveur ssh écoute le port 1022.
-l nom d'utilisateur l'utilisateur défini qui peut se connecter à l'hôte distant avec la méthode d'authentification ssh-key. Dans mon cas, il s'agit de l'utilisateur BUSER .
-i (Identité) utilise la clé privée que nous avons créée avec la commande ssh-keygen. Elle indique l'endroit où cette clé est stockée. L'emplacement par défaut est le dossier personnel de l'utilisateur, dans un répertoire caché appelé ssh (/home/nomutilisateur/.ssh/id_rsa). .
J'espère que cela aidera d'autres utilisateurs à automatiser leur sauvegarde via cron de manière sécurisée.
Double vérification
Depuis la machine source (serveur), assurez-vous d'exécuter votre commande (script) en tant qu'utilisateur ROOT (si vous créez un cronjob, vous devez vous assurer que vous êtes l'utilisateur root (#) lors de la création du cronjob).
Assurez-vous que l'utilisateur sur le serveur de destination a les droits sudo.
Assurez-vous d'avoir fait le visudo comme le décrit Keith dans sa réponse !