git push a través de cron + ssh-agent (sin contraseña)

Como esto ya se ha presentado, solo quiero quitar las publicaciones relacionadas del path:

Permiso denegado (publickey); no es mi problema:

  • git push a través de cron

  • cron git push con la key ssh

Lo más cercano y lo que me llevó a donde estoy, pero no funciona para mí:

  • cron git push con la key ssh

No hay ninguna indicación en el último de lo que , exactamente, llevó a que la respuesta principal se marque como resuelta, pero no tengo problemas con la secuencia de commands de solución de problemas sugerida o los commands manuales sin contraseña / ssh-agent en github.

Tengo un file python que escribe en un logging, que me gustaría enviar a github cada minuto automáticamente desde mi pi raspberry. Aquí está el guión:

~/dir/script export HOME=/home/uname cd /home/uname/dir/ echo $HOME pwd whoami python2 ./python-script.py git commit -am "update" git push 

Cuando lo ejecuto manualmente, obtengo el siguiente resultado:

 $ ./script /home/uname /home/uname/dir uname done ### print from script [master 0db9599] update 1 file changed, 1 insertion(+), 1 deletion(-) Counting objects: 3, done. Delta compression using up to 8 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 306 bytes | 0 bytes/s, done. Total 3 (delta 1), reused 0 (delta 0) To uname@github.com:uname/repo.git def0bed..0db9599 master -> master 

Entonces, ¡todo se ve genial!

Aquí está la línea crontab (editada a través de crontab -e como mi usuario habitual):

 */1 * * * * /home/uname/dir/script 

Aquí está mi logging journalctl después de ejecutar cron :

 CROND[13791]: pam_unix(crond:session): session closed for user uname crond[13862]: pam_unix(crond:session): session opened for user uname by (uid=0) CROND[13863]: (uname) CMD (/home/uname/dir/script) CROND[13862]: (uname) CMDOUT (/home/uname) CROND[13862]: (uname) CMDOUT (/home/uname/dir CROND[13862]: (uname) CMDOUT (uname) CROND[13862]: (uname) CMDOUT (done) CROND[13862]: (uname) CMDOUT ([master 4fd590d] update) CROND[13862]: (uname) CMDOUT ( 1 file changed, 1 insertion(+), 1 deletion(-)) CROND[13862]: [50B blob data] CROND[13862]: (uname) CMDOUT (fatal: Could not read from remote repository.) CROND[13862]: (uname) CMDOUT () CROND[13862]: (uname) CMDOUT (Please make sure you have the correct access rights) CROND[13862]: (uname) CMDOUT (and the repository exists.) CROND[13862]: pam_unix(crond:session): session closed for user uname 

De googlear un poco para asegurarse de que el usuario estaba configurado correctamente para github, probé el command explícito que se muestra en la respuesta aceptada aquí :

 git push ssh://uname@github.com/uname/repo.git 

No soy un experto en git, así que pensé que era solo un ejemplo en github, pero parece que funciona bien también:

 git push ssh://git@github.com/uname/repo.git 

También probé la sugerencia ~/.ssh/config de la misma respuesta anterior . A saber:

 $ cat ~/.ssh/config Host github-project1 User git HostName github.com IdentityFile ~/.ssh/id_rsa.pub 

Entonces:

 git remote add github-project1 github-project1:uname/repo.git 

Obtengo los mismos resultados con todas las variantes que he probado; las pulsaciones manuales y la secuencia de commands se ejecutan bien, pero falla el cron .

¿Qué más puedo verificar?

git push a través de cron + ssh-agent (sin contraseña)

Normalmente, Cron no tiene acceso a su ssh-agent , porque hay una variable de entorno $SSH_AUTH_SOCK en su shell, pero probablemente no está en la que usa cron .