Per me, le soluzioni offerte da altri davano ancora il seguente errore durante go get
git@gl.nimi24.com: autorizzazione negata (chiave pubblica). fatale: impossibile leggere dal repository remoto. Assicurarsi di disporre dei diritti di accesso corretti e che il repository esista.
Ciò che questa soluzione ha richiesto
Come affermato da altri:
git config --global url."git@github.com:".insteadOf "https://github.com/"
Rimozione della passphrase dalla mia ./ssh/id_rsa
chiave che è stata utilizzata per autenticare la connessione al repository. Questo può essere fatto inserendo una password vuota quando richiesto come risposta a:
ssh-keygen -p
Perché questo funziona
Questa non è una soluzione alternativa poiché è sempre meglio avere una passphrase sulla chiave privata, ma stava causando problemi da qualche parte all'interno di OpenSSH.
go get
usa internamente git, che usa openssh per aprire la connessione. OpenSSH prende i certificati necessari per l'autenticazione da .ssh/id_rsa
. Quando si eseguono comandi git dalla riga di comando, un agente può occuparsi di aprire il file id_rsa per te in modo da non dover specificare la passphrase ogni volta, ma quando eseguito nella pancia di go get, questo non ha funzionato in qualche modo nel mio Astuccio. OpenSSH vuole quindi richiedere una password ma poiché non è possibile a causa di come è stato chiamato, stampa nel suo registro di debug:
read_passphrase: impossibile aprire / dev / tty: nessun dispositivo o indirizzo
E fallisce e basta. Se rimuovi la passphrase dal file della chiave, OpenSSH accederà alla tua chiave senza quel prompt e funzionerà
Ciò potrebbe essere causato dal fatto che Go recupera i moduli contemporaneamente e apre contemporaneamente più connessioni SSH a Github (come descritto in questo articolo ). Ciò è in qualche modo supportato dal fatto che il registro di debug di OpenSSH ha mostrato che la connessione iniziale al repository ha avuto esito positivo, ma in seguito ha provato di nuovo per qualche motivo e questa volta ha optato per richiedere una passphrase.
Tuttavia, la soluzione dell'utilizzo del multiplexing della connessione SSH, come avanzata nell'articolo citato, non ha funzionato per me. Per la cronaca, l'autore ha suggerito di aggiungere il conf collowing al file di configurazione ssh per l'host interessato:
ControlMaster auto
ControlPersist 3600
ControlPath ~/.ssh/%r@%h:%p
Ma come detto, per me non ha funzionato, forse ho sbagliato
GOPRIVATE
anche. ad es.export GOPRIVATE="github.com/steelx/that-private-repo"