2016-02-18 20 views
5

Ho un problema quando provo a usare Git con Cygwin. Ho generato e aggiunto la chiave ssh al server GitLab e tutto funziona perfettamente attraverso il MINGW64 (clonazione, estrazione, ecc.), Ma volevo usare Cygwin e ho scoperto che non funziona.Cygwin ssh aggiunto, ma autorizzazione Git negata (chiave pubblica)

Anche se ho messo la copia della mia chiave generata nella cartella ~/user/.ssh e aggiunto manualmente la chiave, quindi "ssh-add -l" la stampa nell'elenco, ma quando provo a recuperare il repository (o qualsiasi altro comando del server) Ho appena ricevuto:

Permission denied (publickey). 
fatal: Could not read from remote repository. 

Please make sure you have the correct access rights 
and the repository exists. 

Sembra un errore, ma forse sto facendo qualcosa di sbagliato. Qualcuno ha avuto questo problema? Grazie.

UPDATE: Dopo aver aggiornato la versione di OpenSSH in Cygwin a quella più recente, il problema descritto sopra è andato.

+0

avete la stessa chiave pubblica stampata da 'ssh-add -L' aggiunta nel server git? – Jakuje

+0

Sì, ho aggiunto la stessa chiave che già funzionava per Git Bash alla cartella utente di Cygwin e l'ho aggiunta nello stesso modo. E ho la stessa chiave pubblica sul server e anche nella cartella utente. Quindi sono davvero confuso da un simile comportamento. – mmelnik

+0

qual è la differenza tra MINGW64 e cygwin per te? Hai l'agente e la connessione ad esso nella shell cygwin da dove fai il clone? – Jakuje

risposta

1

L'agente non deve essere solo in esecuzione, ma gli strumenti devono sapere dove si trova l'agente. È memorizzato nella variabile $SSH_AUTH_SOCK e se funziona per voi da un terminale, non è necessario dal secondo.

Se si desidera che funzioni nei NetBeans, è necessario immettere questa variabile nelle variabili di ambiente NetBeans (ma non si sa come farlo in modo che venga passato dall'ambiente Windows al terminale Cygwin in NetBeans).

Oppure iniettarlo successivamente nel terminale in esecuzione (possibilmente utilizzando .bashrc o altri script di avvio). Il test case semplice sarebbe echo $SSH_AUTH_SOCK nel terminale MinGW e quindi scrivere export SSH_AUTH_SOCK=/the/path/you/got/from/previous/command nel terminale Cygwin.

In seguito è possibile automatizzarlo memorizzando la variabile in un file, che è possibile leggere in Cygwin.

# MinGW scriplet 
echo "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK" >> ~/agent_env 

# Cygwin scriplet 
. ~/agent_env 

Poi si dovrebbe essere in grado di utilizzare il vostro agente di MinGW da shell Cygwin.

+0

Grazie per la risposta!Ho capito il tuo punto, ma non è chiaro per me perché dovrei mettere un agente da MinGW a Cygwin, in quanto sono due terminali diversi con agenti diversi in esecuzione su di essi (diversi SSH_AUTH_SOCK). Inoltre, usano diverse configurazioni di .bashrc (per lo più identiche) e cartelle di risorse separate (specialmente Cygwin che ha la propria infrastruttura * nix-like). Potresti spiegarmi questo, per favore? Ho detto prima che ho aggiunto la mia chiave in entrambi gli agenti. – mmelnik

+1

Il problema è che nessuno di essi è nativo in Windows e si comportano entrambi come livello autonomo sopra il Windows nativo e non conoscono l'altro (e non esiste un modo ragionevole per condividere l'ambiente tra diversi shell standalone, perché i processi * NIX sono progettati per ereditare l'ambiente gli uni dagli altri e il primo è la tua sessione che contiene tutto il necessario). Probabilmente potresti eseguire una shell dall'altra, ma probabilmente non un'applicazione Windows nativa. – Jakuje

+0

Ecco perché ti chiedo perché devo condividere l'agente tra due shell. Io uso solo uno alla volta. Immaginiamo di avere MinGW prima e funzionava bene, ma ora voglio passare completamente a Cygwin e ho avuto questo problema con la chiave ssh, nonostante il fatto che tutte le configurazioni sembrino andare bene per me. – mmelnik

0

Per me, la causa è che ho messo i miei file chiave ssh in C:\Users\username\.ssh (che è /cygdrive/c/Users/username/.ssh in Cygwin), ma in realtà, è necessario mettere le chiavi SSH in ~/.ssh per farlo funzionare. Sono due diverse directory.

Eseguire il comando seguente in cygwin risolto il problema.

cp /cygdrive/c/Users/username/.ssh/* ~/.ssh/ 

Si noti che è necessario sostituire username con quello attuale.

Problemi correlati