1 votes

Impossible de s'authentifier en utilisant une clé SSH lors de l'exécution de script via launchd

J'ai un script Bash qui exécute une commande rsync pour synchroniser des fichiers avec un serveur distant.

#!/bin/bash
rsync -auvzP  --exclude=.bundle --exclude=node_modules --exclude=tmp  '/Volumes/Norman Data/me/.bash_profile' '/Volumes/Norman Data/me/Documents' --exclude=remote me@example.com:backup/

Cela fonctionne lorsque je l'exécute à partir du terminal car j'ai une authentification par clé ssh configurée pour mon utilisateur à l'adresse exemple.com. Cependant, lorsque launchd appelle ce script, j'obtiens l'erreur suivante indiquant qu'il ne peut pas trouver le fichier de clé de mon utilisateur ou qu'il est invalide :

Permission refusée, veuillez réessayer. Permission refusée, veuillez réessayer réessayer. me@example.com : Permission refusée (publickey,password). rsync : connexion fermée de manière inattendue (0 octet reçu jusqu'à présent) [expéditeur]. Erreur rsync : erreur dans le flux de données du protocole rsync (code 12) à l'adresse suivante /BuildRoot/Library/Caches/com.apple.xbs/Sources/rsync/rsync-52/rsync/io.c(453) [sender=2.6.9] Je spécifie mon nom d'utilisateur dans mon fichier plist et lorsque j'utilise la fonction débogage, le script indique qu'il est exécuté par ce même utilisateur à la fois lors de l'exécution depuis le terminal et depuis le lancement. lorsqu'il est exécuté depuis le terminal et depuis launchd.

Mon BackupDaemon.plist :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>EnvironmentVariables</key>
    <dict>
        <key>HOME</key>
        <string>/Volumes/Norman Data/me</string>
    </dict>
    <key>GroupName</key>
    <string>staff</string>
    <key>InitGroups</key>
    <true/>
    <key>Label</key>
    <string>BackupDaemon</string>
    <key>Program</key>
    <string>/Volumes/Norman Data/me/backup</string>
    <key>StandardErrorPath</key>
    <string>/tmp/BackupDaemon.err</string>
    <key>StandardOutPath</key>
    <string>/tmp/BackupDaemon.out</string>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>16</integer>
        <key>Minute</key>
        <integer>6</integer>
    </dict>
    <key>UserName</key>
    <string>me</string>
</dict>
</plist>

Je ne parviens pas à comprendre quel est le problème ou comment procéder à un débogage plus poussé. Si quelqu'un a des idées à partager, il sera très apprécié. Merci.

3voto

Daveh0 Points 305

Voici donc ce que j'ai fini par faire pour le faire fonctionner. Pour mon cas d'utilisation, c'est suffisant, mais je ne pense pas que ce soit la meilleure solution. meilleur solution. Espérons que quelqu'un (voir les commentaires de @Allan dans l'OP) pourra proposer une solution plus universelle.

J'ai ajouté le -e à mon rsync qui vous permet de spécifier la commande ssh exacte utilisée.

rsync -auvzP  -e "ssh -i ~/.ssh/id_rsa_scripts" '/Volumes/Norman Data/me/Documents' me@example.com:backup/

La partie importante là-dedans est ~/.ssh/id_rsa_scripts - J'ai généré un jeu de clés secondaire pour ce serveur, ce jeu ayant les caractéristiques suivantes pas de phrase d'authentification . C'est différent de la façon dont je me connecte à cette boîte via SSH par défaut et c'est pourquoi il fallait le spécifier dans le fichier de configuration. rsync commandement.

C'est la seule façon dont j'ai pu le faire fonctionner sans surveillance (en tant que Global Daemon). Bien que cela soit correct dans mon cas, une clé sans phrase de passe n'est pas la meilleure idée dans de nombreuses situations, et c'est pourquoi ce n'est pas la meilleure solution. meilleur ** solution.

J'espère que quelqu'un pourra trouver un moyen d'autoriser launchd pour exécuter un script nécessitant une authentification SSH utilisant des clés avec une phrase de passe.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X