vaya a obtener resultados en el error 'solicitudes de terminal deshabilitadas' para el repositorio privado de github

187

Creé el ejemplo de repositorio privado / myprivaterepo usando la interfaz de usuario de Github desde mi navegador.

Luego fui a mi directorio go (en el escritorio) y lo cloné:

$ cd $GOPATH
$ go get github.com/examplesite/myprivaterepo

Hasta aquí todo bien. Creé el archivo Scheduler.go, lo agregué al repositorio y lo presioné.

$ vim scheduler.go
$ git add scheduler.go
$ git commit
$ git push

Todo está bien. Pero cuando fui a una computadora portátil limpia e intenté clonar el repositorio, recibí un error:

# Now on laptop, which doesn't yet know about the repo
$ cd $GOPATH
$ go get github.com/examplesite/myprivaterepo
# At this point it should ask for my user ID and password ,right? But it doesn't.
# Instead, this error occurs:
cd .; git clone https://github.com/examplesite/myprivaterepo /Users/tom/go/src/github.com/examplesite/myprivaterepo
Cloning into '/Users/tom/go/src/github.com/examplesite/myprivaterepo'...
fatal: could not read Username for 'https://github.com': terminal prompts disabled
package github.com/examplesite/myprivaterepo: exit status 128

¿Por qué mi computadora portátil odia mi propio repositorio y cómo puedo hacer que acepte su destino? Gracias.

tomcam
fuente
10
Esto no es un goerror, gitestá devolviendo "mensajes de terminal deshabilitados". ¿Se puede ejecutar git clone https://github.com/examplesite/myprivaterepoen su computadora portátil?
JimB
1
Gracias. El clon git funcionó. Entonces el ir a trabajar. ¿Cual es el trato? ¿Tengo que "cebar la bomba" de esta manera cada vez o configuré algo incorrectamente?
tomcam
1
@tomcam, puede agregar claves ssh a la cuenta de github e ir a trabajar funcionará desde el principio, consulte help.github.com/articles/generating-ssh-keys
alex vasi
@alexvasi: eso solo funciona si clona el repositorio sobre ssh primero, ya que solicitará https://github.com/si la ruta de importación no existe. El proceso git debe ser capaz de mensaje para el nombre de usuario / contraseña, así que debe haber algo diferente en la configuración del ordenador portátil - diferente cáscara, diferente .gitconfig, una variable de entorno, etc.
JimB
Todo esto me ha ayudado, pero no estoy seguro de cómo marcar como respondido y / o resuelto. Esto es lo que tengo hasta ahora.
tomcam

Respuestas:

175

go get deshabilita el "indicador de terminal" de forma predeterminada. Esto se puede cambiar estableciendo una variable de entorno de git:

env GIT_TERMINAL_PROMPT=1 go get github.com/examplesite/myprivaterepo
Mar Shafreeck
fuente
307

Encontré esto extremadamente útil, y resolvió mi problema. Este comando permitirá que su 2FA haga lo suyo (y le ahorrará la molestia de ingresar su nombre de usuario y contraseña):

git config --global --add url."[email protected]:".insteadOf "https://github.com/"

Fuente: http://albertech.blogspot.com/2016/11/fix-git-error-could-not-read-username.html

Si no está usando 2FA, aún puede usar SSH y esto funcionará.

Editar: agregó la --addbandera como lo sugiere slatunje .

Wylliam Judd
fuente
12
Recomiendo agregar el indicador --add para que no sobrescriba las configuraciones existentes que pueda tener. Por ejemplo:git config --global --add url."[email protected]:".insteadOf "https://github.com/"
slatunje
Gracias slatunje, agregué la bandera a mi respuesta en función de sus comentarios.
Wylliam Judd
55
Esta es la mejor solución de la OMI. Es más seguro y menos esfuerzo (una vez configurado) usar claves SSH para autenticación en lugar de nombre de usuario / contraseña
bodecker
1
No hagas esto en Windows. Terminé con un error [email protected]: Permission denied (publickey). fatal: Could not read from remote repository..
Shital Shah
1
Funciona para Linux también. debería funcionar para todos si está usando ssh globaly
Chiptus
39

Primero: go getse negará a autenticarse en la línea de comando. Por lo tanto, debe almacenar en caché las credenciales en git. Debido a que uso osx, puedo usar osxkeychain credential helper.

2do Para mí, tengo habilitado 2FA y, por lo tanto, no pude usar mi contraseña para la autenticación. En cambio, tuve que generar un token de acceso personal para usar en lugar de la contraseña.

  1. configurar el asistente de credenciales osxkeychain https://help.github.com/articles/caching-your-github-password-in-git/
  2. Si usa TFA en lugar de usar su contraseña, genere un token de acceso personal con alcance de repositorio https://github.com/settings/tokens
  3. git clonó un repositorio privado solo para hacer que git clone https://github.com/user/private_repo guarde en caché la contraseña y usó su nombre de usuario github.com para nombre de usuario y el token de acceso personal generado para contraseña.
  4. Se eliminó el repositorio y la nueva prueba clonados para garantizar que los créditos se almacenaron en caché, git clone https://github.com/user/private_repoy esta vez no se solicitaron créditos.

    1. go get funcionará con cualquier repositorio al que pueda acceder el token de acceso personal. Es posible que deba repetir los pasos con otras cuentas / tokens, ya que los permisos varían.
Mike Graf
fuente
1
Tengo 2FA y esto funcionó para mí: generé un token (con privilegios completos), hice git cloneuno de mis propios repositorios existentes (en realidad es público), se me solicitó, ingresé usernamemi nombre de usuario de GitHub y luego ingresé el token generado para password: eliminó el repositorio clonado, luego volvió a ejecutar el go getcomando y todo estuvo bien, ¡gracias! (OSX aquí también)
Eric Dorsey
3
Esto también es realmente genial porque puedes limitar el alcance del token a solo "leer" para repositorios privados, por lo que incluso si de alguna manera se mete en una imagen en la naturaleza, solo pueden leer tu código y no insertar cosas y puedes revocar el token con mucha facilidad. No recuerdo si todavía tienen la caducidad automática incorporada.
dragon788
16

Si solo quieres go gettrabajar muy rápido y seguir adelante con tu trabajo ...

Solo exportar GIT_TERMINAL_PROMPT=1

$ export GIT_TERMINAL_PROMPT=1
$ go get [whatever]

Ahora le pedirá un usuario / pase para el resto de su sesión de shell. Ponga esto en su .profileo configuración gitcomo arriba para una solución más permanente.

EdH
fuente
16

Se queja porque necesita usar en sshlugar de httpspero su git todavía está configurado con https. así que, básicamente, como otros mencionaron anteriormente, debe habilitar las indicaciones o configurar git para usar en sshlugar de https. Una forma sencilla de hacerlo ejecutando lo siguiente:

git config --global --add url."[email protected]:".insteadOf "https://github.com/"

o si ya utiliza sshcon giten su máquina, que con seguridad puede editar ~/.gitconfigy añadir la siguiente línea en la parte inferior

Nota: Esto cubre todo SVC, control de versión de origen, que depende de lo que use exactamente, github, gitlab, bitbucket)

# Enforce SSH
[url "ssh://[email protected]/"]
  insteadOf = https://github.com/
[url "ssh://[email protected]/"]
        insteadOf = https://gitlab.com/
[url "ssh://[email protected]/"]
  insteadOf = https://bitbucket.org/
  • Si desea mantener las pompas de contraseña deshabilitadas, debe almacenar en caché la contraseña. Para obtener más información sobre cómo almacenar en caché su contraseña de Github en Mac, Windows o Linux, visite esta página .

  • Para obtener más información sobre cómo agregar ssh a su cuenta de github, visite esta página .

Además, lo que es más importante, si este es un repositorio privado para una empresa o para usted mismo, es posible que deba omitir el uso de la base de datos de proxy o suma de comprobación para dichos repositorios para evitar exponerlos públicamente.

Para hacer esto, debe establecer GOPRIVATEuna variable de entorno que controle qué módulos el comando go considera privados (no disponibles públicamente) y, por lo tanto, NO debe usar la base de datos de proxy o suma de comprobación.

La variable es una lista de patrones separados por comas (misma sintaxis de Go path.Match) de prefijos de ruta de módulo. Por ejemplo,

export GOPRIVATE=*.corp.example.com,github.com/mycompany/*

O

go env -w GOPRIVATE=github.com/mycompany/*
  • Para obtener más información sobre cómo resolver problemas de validación de suma de comprobación de paquetes / módulos privados, lea este artículo .
  • Para obtener más información sobre los módulos go 13 y las nuevas mejoras, consulte las Notas de lanzamiento de los módulos Go 1.13 .

Una última cosa que no debe olvidar mencionar, aún puede configurar go getpara autenticar y buscar https, todo lo que necesita hacer es agregar la siguiente línea a$HOME/.netrc

machine github.com login USERNAME password APIKEY

Espero que esto ayude a la comunidad y ahorre tiempo a otros para resolver los problemas descritos rápidamente. no dude en dejar un comentario en caso de que desee más apoyo o ayuda.

Muhammad Soliman
fuente
GOPRIVATE( go env -w GOPRIVATE=github.com/mycompany/*) es lo único que funcionó para mí. Podría sugerir poner eso bajo su propio título o incluso en una respuesta propia para resaltarlo un poco más.
Bernhard Barker
1

Si configura su gitconfig con esta opción, más tarde tendrá un problema para clonar otros repositorios de GitHub

git config --global --add url. "[email protected]". Instead, "https://github.com/"

En cambio, le recomiendo que use esta opción

echo "export GIT_TERMINAL_PROMPT=1" >> ~/.bashrc || ~/.zshrc

y no olvide generar un token de acceso desde su repositorio privado. Cuando se le solicite ingresar su contraseña, simplemente pegue el token de acceso. Feliz clon :)

cooljl86
fuente
0

Tuve el mismo problema en Windows "error: no se pudo ejecutar el script de solicitud (código de salida 1) fatal: no se pudo leer el nombre de usuario para ' https://github.com ': Sin error" al intentar iniciar sesión en github a través del diálogo de inicio de sesión. Cuando cancelé el diálogo, git me pidió un nombre de usuario y contraseña en la línea de comando y funcionó bien.

Nick Proto
fuente