tengo un cronjob:
0 9 * * * rsync -a mydir remote_machine:
Lo instalé con 'crontab -e'. Tengo un agente ssh ejecutándose, y cuando ejecuto el comando rsync en sí mismo, funciona sin ninguna interacción del usuario o entrada de contraseña, pero el cronjob falla con el siguiente mensaje:
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]
¿Por qué no funciona esto? Sé que los cronjobs se ejecutan conmigo como el usuario (si ejecuto '* * * * * touch / tmp / a' soy dueño del archivo), así que supongo que rsync inicia sesión como yo usando mi clave privada ...
llavero es lo que necesitas! Simplemente instálelo y agregue el siguiente código en su
.bash_profile
(o equivalente):Para config.fish ( 2 ):
Luego use el siguiente código en su script para cargar las variables de entorno ssh-agent:
Para peces:
Si su clave tiene una frase de contraseña, el llavero le preguntará una vez (válido hasta que reinicie la máquina o elimine el agente ssh).
Nota: el llavero también genera código
csh
yfish
shells, así que simplemente reemplace el sufijo "-sh" por "-csh" o "-fish".fuente
No tengo suficiente representante para votar la primera respuesta, pero resolvió el problema que estaba teniendo. En términos de ssh-agent, es posible que ya tenga uno en ejecución. Aquí hay un script para extraer el SSH_AGENT_PID y SSH_AUTH_SOCK del entorno sin ningún material adicional para guardar en el inicio de ssh-agent. (Asume que tienes perl)
Ponga lo siguiente en un script. (por ejemplo findagent.pl)
y dentro de su secuencia de comandos cron agregue la línea:
eval `{ruta de acceso al script} / findagent.pl`
fuente
Supongo que está utilizando autenticación basada en clave para autenticarse con la máquina remota. Prueba la siguiente línea:
Donde .ssh / id_rsa es la ruta a su clave privada. Esta es la línea exacta que estoy usando para hacer mis copias de seguridad y siempre funciona bien para mí.
Mis mejores deseos,
Fabián
fuente
Como alternativa, en lugar de utilizar el agente ssh, hice que mi script exportara RSYNC_RSH = "ssh -i /home/user/.ssh/id_rsa" unset SSH_AGENT_PID unset SSH_AUTH_SOCK antes de invocar rsync. Al ponerlo en RSYNC_RSH en lugar de usar '-e ...', facilitó el ajuste del archivo de identificación que se usa en función del host.
Espero que esto ayude, B
fuente