1 votos

No se puede autenticar usando la clave SSH cuando se ejecuta script a través de launchd

Tengo un Bash script que ejecuta un comando rsync para sincronizar archivos con un servidor remoto.

#!/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/

Esto funciona cuando lo ejecuto desde la terminal ya que tengo la autenticación de la clave ssh configurada para mi usuario en example.com. Sin embargo, cuando launchd llama a este script, obtengo el siguiente error indicando que no puede encontrar el archivo de claves de mi usuario o que no es válido:

Permiso denegado, por favor, inténtelo de nuevo. Permiso denegado, por favor intente de nuevo. me@example.com: Permiso denegado (publickey,password). rsync: conexión cerrada inesperadamente (0 bytes recibidos hasta el momento) [remitente] Error de rsync: error en el flujo de datos del protocolo rsync (código 12) en /BuildRoot/Library/Caches/com.apple.xbs/Sources/rsync/rsync-52/rsync/io.c(453) [sender=2.6.9] Estoy especificando mi nombre de usuario en mi archivo plist y al depuración, el script dice que está siendo ejecutado por ese mismo usuario tanto cuando ejecutándolo desde la terminal y desde launchd igualmente.

Mi 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>

No consigo averiguar cuál puede ser el problema ni cómo seguir depurando. Cualquier idea que alguien tenga para compartir será muy apreciada. Gracias.

3voto

Daveh0 Puntos 123

Así que esto es lo que acabé haciendo para que funcionara. Para mi caso de uso es suficiente, pero no creo que sea la mejor solución. Esperemos que alguien (ver los comentarios de @Allan en el OP) pueda dar una solución más universal.

He añadido el -e opción a mi rsync que le permite especificar el comando ssh exacto utilizado.

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

La parte importante ahí es ~/.ssh/id_rsa_scripts - He generado un conjunto secundario de claves para ese servidor, teniendo este conjunto sin frase de paso . Esto es diferente de cómo me conecto a esa caja a través de SSH por defecto y por lo tanto por lo que necesitaba ser especificado en el rsync comando.

Esa fue la única forma en la que pude conseguir que funcionara cuando se ejecutaba de forma desatendida (como un Daemon Global). Aunque está bien bajo mi conjunto de circunstancias, una clave sin frase de paso no es la mejor idea en muchas situaciones, por lo que este no es el **. mejor ** solución.

Esperemos que alguien pueda encontrar una manera de permitir launchd para ejecutar un script que requiera autenticación SSH mediante claves con una frase de paso.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X