¿Cuál es la forma correcta de usar git con gnome-keyring y http (s) repos?

43

Actualmente, siempre que yo git pullo git pushen un repositorio http (s), obtengo lo siguiente:

$ git pull
Username for 'https://gitrepos.reposdomain.com': [email protected]
Password for 'https://[email protected]@gitrepos.reposdomain.com': 

Esto está bien para un uso poco frecuente, pero comienza a volverse realmente molesto muy rápidamente. Desafortunadamente, cambiar a ssh no es una opción en este caso.

He leído que las versiones anteriores de gitproporcionaban una credencial "almacenar" y "caché", pero que esto no se aconsejaba porque almacenaba la contraseña en texto sin formato.

PERO

Las versiones más recientes de gitaparentemente almacenan las credenciales de git en el gnome-keyring, pero deben configurarse correctamente.

Intenté seguir otras respuestas (que no son de Ubuntu) en SO para que esto funcione (es decir, esta ), pero aún me aparece el mensaje de nombre de usuario y contraseña.

¿Cuál es la forma correcta y más segura de almacenar gitcredenciales para repositorios http (s) y cómo hace que funcionen en Ubuntu?

tu-Reinstate Monica-dor duh
fuente
Debe mencionar qué métodos probó. De lo contrario, puede encontrar respuestas que sugieran exactamente esas.
muru
@muru ¿Por qué ha eliminado el énfasis que agregué para la legibilidad? Ahora es solo una gota de texto y las razones que diferencian la pregunta de los demás y la pregunta real es menos obvia.
tu-Reinstate Monica-dor duh
Una oración completa en negrita y cursiva es difícil de leer.
muru
1
@muru ruego diferir. Me parece que el texto en negrita y cursiva resalta las partes esenciales de la pregunta.
tu-Reinstate Monica-dor duh

Respuestas:

45

gnome-credential-helper ahora está en desuso.

En su lugar, use libsecret. Si aún no está incorporado en su ubuntu, utilice el siguiente procedimiento:

  1. Puede instalar libsecrety desarrollar las bibliotecas con:

    sudo apt-get install libsecret-1-0 libsecret-1-dev

  2. Entonces necesita construir el administrador de credenciales

    cd /usr/share/doc/git/contrib/credential/libsecret

    sudo make

  3. Finalmente, debe apuntar git al archivo recién creado en su configuración:

    git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret

Más detalles en https://stackoverflow.com/a/40312117/2017781

eddygeek
fuente
1
Es posible que desee tener en cuenta que esta solución solo se aplica a las versiones de git> = 2.11 (donde se puede encontrar el directorio libsecret)
Charles Roberto Canato
1
¿Es esto seguro? ¿Dónde se guardan los secretos? ¿Son seguras tanto la transmisión como el almacenamiento? ¿Hay alguna documentación oficial? Aparentemente, según esta página y esta página , está en "Principal" y mantenido por Debian / Ubuntu. Y: "Se comunica con el 'Servicio Secreto' usando DBus".
caw
1
@caw: En GNOME, "Servicio Secreto" es el mismo demonio gnome-keyring, solo a través de una API diferente. (El plan era permitir libsecret otra DES para construir sus propios backends de apoyo a la misma API, por ejemplo KDE planea implementar esto en kwalletd.)
grawity
55
Actualizando mi respuesta preferida ya que puedo verificar que esto funciona en 18.04. :)
tu-Reinstate Monica-dor duh
44

Necesitas configurar el git credential helpercon Gnome Keyring:

Instale y compile el desarrollo Gyrome Keyring:

sudo apt-get install libgnome-keyring-dev
sudo make --directory=/usr/share/doc/git/contrib/credential/gnome-keyring

Y configure la credencial:

git config --global credential.helper /usr/share/doc/git/contrib/credential/gnome-keyring/git-credential-gnome-keyring

fuente
Eso es realmente extraño. Semánticamente, no debería haber diferencia entre la respuesta en el enlace y esta respuesta. Pero por alguna razón, esta respuesta funciona donde la otra no.
tu-Reinstate Monica-dor duh
Luego ejecute git pusho git pullcomo de costumbre y la primera vez le preguntará a ansd store, y cada vez que lo obtenga lo obtendrá del llavero. Para verificarlo, ejecute seahorse. Debe aparecer en "Contraseñas" -> "Iniciar sesión".
tu-Reinstate Monica-dor duh
@ tudor Eso es extraño, no veo ninguna diferencia "conceptual" entre mi respuesta y la del enlace. Me alegro de que ayude.
Me parece extraño que todavía tengas que ejecutar el comando "make", pero estos pasos funcionan muy bien. ¡Gracias!
DaveTheScientist
2

Este enfoque simple parece ser suficiente en mi Ubuntu 18.04.1 con git 2.17.1:

git config --global credential.helper cache

Puede especificar un tiempo de espera de una hora (= 3600 segundos) como este:

git config --global credential.helper 'cache --timeout=3600'

Lectura adicional en el excelente manual .

Stephan Henningsen
fuente