2013-10-27 18 views
9

Sto provando a far diventare il mio server personale il mio git primario remoto e rispecchiarlo automaticamente su github. Ho trovato this article che funziona principalmente con uno script post-receive che fa git push --mirror (essenzialmente).mirroring di un repository git self-hosted su github.com (errori di autenticazione)

Il mio approccio è diverso in quanto vorrei evitare di dover creare e proteggere una chiave di distribuzione e quindi configurarla su ogni repository.

Il mio script di post-ricezione funziona correttamente con la maggior parte delle varianti seguenti come indicato nei commenti tranne quando eseguo il reindirizzamento completo nohup + stdio + backgrounding come nell'articolo del blog sopra, l'autenticazione smette di funzionare.

GITHUB_USERNAME=focusaurus 
BARE_PATH=$(pwd -P) 
REPO_NAME=$(basename "${BARE_PATH}") 
REPO_URL="ssh://[email protected]/${GITHUB_USERNAME}/${REPO_NAME}" 
echo "About to mirror to ${REPO_URL}" 

#hmm, this works 
#git push --mirror "${REPO_URL}" 

#this works, too 
#nohup git push --mirror "${REPO_URL}" 

#and this also works OK 
nohup git push --mirror "${REPO_URL}" & 

#but this fails with 
#Permission denied (publickey). 
#fatal: The remote end hung up unexpectedly 
#Somehow ssh agent forwarding must get screwed up? Help me, Internet. 
#nohup git push --mirror "${REPO_URL}" &>>/tmp/mirror_to_github.log & 

#this is the one used in the blog post above but it also fails 
# nohup git push --mirror "${REPO_URL}" &>/dev/null & 

Ho ssh agent forwarding che credo sia il modo in cui funzionano le versioni di lavoro. Quindi la mia domanda è perché queste ultime 2 variazioni falliscono con errori di autenticazione?

+0

Sei sicuro che l'errore sia causato da queste modifiche e non da qualcos'altro? –

+0

Sì. Ho testato tutti questi aromi sopra e secondo i commenti, quelli che sono contrassegnati come "funziona OK" funzionano in modo affidabile, e quindi semplicemente cambiando il modo in cui lo stdio viene gestito in modo coerente causa un errore. –

+0

Quindi sembra che il problema potrebbe essere qualcosa nella mia configurazione ssh. Indagare. –

risposta

1

Forse si può provare a impostare il flag verbose su ssh per capire cosa non va.

È possibile utilizzare la variabile di ambiente GIT_SSH per sostituire il comando che git utilizzerà per aprire la connessione ssh. Dalla pagina man:

GIT_SSH 
     If this environment variable is set then git fetch and git push 
     will use this command instead of ssh when they need to connect to a 
     remote system. The $GIT_SSH command will be given exactly two 
     arguments: the [email protected] (or just host) from the URL and the 
     shell command to execute on that remote system. 

     To pass options to the program that you want to list in GIT_SSH you 
     will need to wrap the program and options into a shell script, then 
     set GIT_SSH to refer to the shell script. 

Quindi, uno script in /tmp/verb-ssh che assomiglia:

#!/bin/bash 
/usr/bin/ssh -vvv "[email protected]" 

e quindi impostando la variabile d'ambiente GIT_SSH=/tmp/verb-ssh dovrebbe fornire alcune utili informazioni di debug.

+0

Bene, questo è un ottimo consiglio per ottenere qualche output di debug. Non riesco ancora a capire la causa alla radice, ma penso che sto per andare al KISS e lasciare la spinta per github in primo piano perché di solito è comunque veloce. –