usar - git y github
¿Hay alguna forma de omitir la escritura de contraseñas al usar https:// en GitHub? (23)
Recientemente cambié a la sincronización de mis repositorios a https: // en GitHub (debido a problemas con el firewall), y siempre me pide una contraseña. Solía ser que tenía un certificado SSH , y era suficiente. ¿Hay alguna forma de omitir la contraseña en mi caso (usando http / https)?
Con Git versión 1.7.9 y posteriores.
Desde Git 1.7.9 (lanzado a fines de enero de 2012), existe un mecanismo ordenado en Git para evitar tener que escribir su contraseña todo el tiempo para HTTP / HTTPS, llamados ayudantes de credenciales . (Gracias a dazonic por señalar esta nueva característica en los comentarios a continuación).
Con Git 1.7.9 o posterior, puedes usar uno de los siguientes ayudantes de credenciales:
git config --global credential.helper cache
... lo que le dice a Git que mantenga su contraseña almacenada en la memoria caché durante (por defecto) 15 minutos. Puede establecer un tiempo de espera más largo con:
git config --global credential.helper "cache --timeout=3600"
(Ese ejemplo fue sugerido en la página de ayuda de GitHub para Linux ). También puede almacenar sus credenciales permanentemente, si lo desea, consulte las otras respuestas a continuación.
La ayuda de GitHub también sugiere que si estás en Mac OS X y Homebrew para instalar Git, puedes usar el almacén de claves nativo de Mac OS X con:
git config --global credential.helper osxkeychain
Para Windows, hay un ayudante llamado Git Credential Manager para Windows o wincred en msysgit .
git config --global credential.helper wincred # obsolete
Con Git para Windows 2.7.3+ (marzo de 2016):
git config --global credential.helper manager
Para Linux, puede usar gnome-keyring
(u otra implementación de llavero como KWallet).
Con versiones Git anteriores a 1.7.9.
Con las versiones de Git anteriores a 1.7.9, esta opción más segura no está disponible, y tendrá que cambiar la URL que utiliza su remoto de origin
para incluir la contraseña de esta manera:
https://you:[email protected]/you/example.git
... en otras palabras con :password
después del nombre de usuario y antes de @
.
Puede establecer una nueva URL para su origin
remoto con:
git config remote.origin.url https://you:[email protected]/you/example.git
Asegúrese de utilizar https
, y debe tener en cuenta que si hace esto, su contraseña de GitHub se almacenará en texto sin formato en su directorio .git
, lo que obviamente es indeseable.
Con cualquier versión de Git (bueno, desde la versión 0.99)
Un enfoque alternativo es poner su nombre de usuario y contraseña en su archivo ~/.netrc
, aunque, al mantener la contraseña en la URL remota, esto significa que su contraseña se almacenará en el disco como texto simple y, por lo tanto, es menos segura y segura. no recomendado. Sin embargo, si desea adoptar este enfoque, agregue la siguiente línea a su ~/.netrc
:
machine <hostname> login <username> password <password>
... reemplazando <hostname>
con el nombre de host del servidor, y <username>
y <password>
con su nombre de usuario y contraseña. También recuerde establecer permisos de sistema de archivos restrictivos en ese archivo:
chmod 600 ~/.netrc
Tenga en cuenta que en Windows, este archivo debe llamarse _netrc
, y es posible que deba definir la variable de entorno% HOME%. Para obtener más detalles, consulte:
OAuth
Puede crear su propio token API personal ( OAuth ) y usarlo de la misma manera que usaría sus credenciales normales (en: /settings/tokens
). Por ejemplo:
git remote add fork https://[email protected]/foo/bar
git push fork
.netrc
Otro método es configurar su usuario / contraseña en ~/.netrc
( _netrc
en Windows), por ejemplo
machine github.com
login USERNAME
password PASSWORD
Para HTTPS:
machine github.com
login USERNAME
password PASSWORD
protocol https
Un ayudante de credenciales
Para guardar en caché su contraseña de GitHub en Git al usar HTTPS, puede usar un asistente de credenciales para decirle a Git que recuerde su nombre de usuario y contraseña de GitHub cada vez que hable con GitHub.
- Mac:
git config --global credential.helper osxkeychain
(seosxkeychain helper
), - Windows:
git config --global credential.helper wincred
- Linux y otros:
git config --global credential.helper cache
Relacionado:
- ¿Cómo almacenar su contraseña GitHub https en Linux en un llavero de terminal?
- ¿Cómo me aseguro de que Git no me pida mi nombre de usuario y contraseña de GitHub?
- Configure clientes Git, como GitHub para Windows, para no solicitar autenticación.
- Presionar un repositorio local a un repositorio de GitHub que tiene autenticación de doble factor
TLDR; Utilice un archivo netrc cifrado con Git 1.8.3+ .
Es posible guardar una contraseña para una URL de HTTPS del repositorio de Git con ~/.netrc
(Unix) o %HOME%/_netrc
(observe la _
) en Windows.
Pero : Ese archivo almacenaría su contraseña en texto plano.
Solución : Cifre ese archivo con GPG (GNU Privacy Guard) y haga que Git lo descifre cada vez que necesite una contraseña (para la operación push
/ pull
/ fetch
/ clone
).
Nota: con Git 2.18 (Q2 2018), ahora puede personalizar el GPG utilizado para descifrar el archivo .netrc
cifrado.
Ver commit 786ef50 , commit f07eeed (12 de mayo de 2018) por Luis Marsano (``) .
(Fusionada por Junio C Hamano - gitster
- in commit 017b7c5 , 30 de mayo de 2018)
git-credential-netrc
: acepta la opcióngpg
git-credential-netrc
fue codificado para descifrar con ''gpg
'' independientemente de la opción gpg.program.
Este es un problema en distribuciones como Debian que llaman al moderno GnuPG otra cosa, como ''gpg2
''
Instrucciones paso a paso para Windows
Con Windows:
(Git tiene un gpg.exe
en su distribución, pero el uso de una instalación completa de GPG incluye un gpg-agent.exe
, que memorizará su frase de contraseña asociada a su clave de GPG).
Instale
gpg4Win Lite
, la interfaz de línea de comandos de gnupg mínima (tome elgpg4win-vanilla-2.XY-betaZZ.exe
más reciente ), y complete su RUTA con el directorio de instalación de GPG:set PATH=%PATH%:C:/path/to/gpg copy C:/path/to/gpg/gpg2.exe C:/path/to/gpg/gpg.exe
(Tenga en cuenta el comando '' copy
'': Git necesitará un script Bash para ejecutar el comando '' gpg
''. Ya que gpg4win-vanilla-2
viene con gpg2.exe
, debe duplicarlo).
Crea o importa una clave GPG, y confía en ella:
gpgp --import aKey # or gpg --gen-key
(Asegúrese de poner una frase de paso a esa clave).
Confía en esa clave
Instale el script del asistente de credenciales en un directorio dentro de su
%PATH%
:cd c:/a/fodler/in/your/path curl -o c:/prgs/bin/git-credential-netrc https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc
(Sí, este es un script Bash, pero funcionará en Windows ya que Git lo llamará).
Hacer un archivo _netrc en texto claro
machine a_server.corp.com login a_login password a_password protocol https machine a_server2.corp.com login a_login2 password a_password2 protocol https
(No olvide la parte del '' protocol
'': '' http
'' o '' https
'' dependiendo de la URL que usará).
Cifrar ese archivo:
gpg -e -r a_recipient _netrc
(Ahora puede eliminar el archivo _netrc
, manteniendo solo el _netrc.gpg
encriptado).
Use ese archivo encriptado:
git config --local credential.helper "netrc -f C:/path/to/_netrc.gpg -v"
(Tenga en cuenta que '' /
'': C:/path/to...
no funcionaría en absoluto.) (Puede usar al principio -v -d
para ver qué está pasando).
De ahora en adelante, cualquier comando Git que use una URL HTTP (S) que requiera autenticación descifrará ese archivo _netrc.gpg
y usará el nombre de usuario / contraseña asociado al servidor con el que se está contactando. La primera vez, GPG le pedirá la frase de contraseña de su clave GPG para descifrar el archivo. Las otras veces, el agente gpg lanzado automáticamente por la primera llamada GPG proporcionará esa frase de contraseña para usted.
De esa manera, puede memorizar varias URL / nombres de usuario / contraseñas en un archivo, y tenerlo almacenado en su disco cifrado.
Me parece más conveniente que un "ayudante de caché", donde necesita recordar y escribir (una vez por sesión) una contraseña diferente para cada uno de sus servicios remotos, para que dicha contraseña se almacene en la memoria caché.
¡No fue inmediatamente obvio para mí que necesitaba descargar el asistente primero! Encontré la descarga de credential.helper en confluence.atlassian.com/display/STASH/… .
Citar:
Siga estos pasos si desea usar Git con caché de credenciales en OS X:
Descarga el binario git-credential-osxkeychain.
Ejecute el siguiente comando para asegurarse de que el binario sea ejecutable:
chmod a+x git-credential-osxkeychain
Ponlo en el directorio /usr/local/bin
.
Ejecute el siguiente comando:
git config --global credential.helper osxkeychain
Después de clonar el repo
, puede editar repo/.git/config
y agregar alguna configuración como a continuación:
[user]
name = you_name
password = you_password
[credential]
helper = store
Entonces no se le pedirá de nuevo el username
de username
y la password
.
En una configuración de GNU / Linux, un ~ / .netrc también funciona bastante bien:
$ cat ~/.netrc
machine github.com login lot105 password howsyafather
Puede depender de qué bibliotecas de red está utilizando Git para el transporte HTTPS .
Es mejor usar las credenciales por seguridad, pero puedes mantenerlas durante un tiempo usando el caché:
git config --global credential.helper cache
git config credential.helper ''cache --timeout=3600''
Sus credenciales se guardarán durante 3600 segundos.
Esto funciona para mí, estoy usando Windows 10
git config --global credential.helper wincred
Hay una manera fácil y antigua de almacenar las credenciales de los usuarios en una URL de HTTPS:
https://user:[email protected]/...
Puede cambiar la URL con git remote set-url <remote-repo> <URL>
El inconveniente obvio de este enfoque es que debe almacenar la contraseña en texto sin formato. Aún puede ingresar el nombre de usuario ( https://[email protected]/...
) que al menos le ahorrará la mitad de la molestia.
Es posible que prefiera cambiar a SSH o usar el software de cliente GitHub.
La documentación del compositor mentions que puedes evitar que use la API de GitHub, para que actúe como un git clone
:
Si establece la clave
no-api
entrue
en un repositorio de GitHub, clonará el repositorio como lo haría con cualquier otro repositorio de Git en lugar de usar la API de GitHub. Pero a diferencia de usar el controladorgit
directamente, el compositor intentará usar los archivos zip de GitHub.
Así que la sección se vería así:
"repositories": [
{
"type": "vcs",
"no-api": true,
"url": "https://github.com/your/repo"
}
],
Tenga en cuenta que la API está ahí por una razón. Por lo tanto, este debe ser un método de último recurso para el aumento de carga en github.com.
Las cosas son un poco diferentes si estás usando la autenticación de dos factores como yo. Ya que no encontré una buena respuesta en otro lugar, pegaré una aquí para que pueda encontrarla más tarde.
Si está utilizando la autenticación de dos factores, la especificación del nombre de usuario / contraseña no funcionará, se le deniega el acceso. Pero puede usar un token de acceso a la aplicación y usar el ayudante de credenciales de Git para guardarlo en caché. Aquí están los enlaces pertinentes:
- Configuración de la línea de comandos para que funcione con autenticación de 2 factores (busque la sección titulada "¿Cómo funciona para Git en la línea de comandos?")
- Caché de credenciales
Y no recuerdo dónde vi esto, pero cuando se le pide su nombre de usuario, ahí es donde se pega el token de acceso a la aplicación. A continuación, deje la contraseña en blanco. Funcionó en mi Mac.
Para Windows puede usar el complemento Git Credential Manager (GCM). Actualmente es mantenido por Microsoft. Lo bueno es que guarda la contraseña en el almacén de credenciales de Windows, no como texto sin formato.
Hay un instalador en la página de lanzamientos del proyecto. Esto también instalará la versión oficial de Git para Windows con el administrador de credenciales integrado. Permite la autenticación de dos factores para GitHub (y otros servidores). Y tiene una interfaz gráfica para iniciar sesión inicialmente.
Para usuarios de Cygwin (o usuarios que ya usan el Git oficial para Windows), es posible que prefiera la instalación manual. Descarga el paquete zip desde la página de lanzamientos . Extraiga el paquete y luego ejecute el archivo install.cmd
. Esto se instalará en su carpeta ~/bin
. (Asegúrese de que su directorio ~/bin
esté en su RUTA.) Luego, configúrelo con este comando:
git config --global credential.helper manager
Git ejecutará entonces git-credential-manager.exe
cuando se autentique en cualquier servidor.
Por lo general, tienes una URL remota algo como esto,
git remote -v
origin https://gitlab.com/username/Repo.git (fetch)
origin https://gitlab.com/username/Repo.git (push)
Si desea omitir el nombre de usuario y la contraseña mientras usa git push
, intente esto:
git remote set-url origin https://username:[email protected]/username/Repo.git
Acabo de agregar la misma URL (con los detalles del usuario, incluida la contraseña) al origen.
NOTA: No funciona si el nombre de usuario es un ID de correo electrónico.
git remote -v
origin https://username:[email protected]/username/Repo.git (fetch)
origin https://username:[email protected]/username/Repo.git (push)
Puede utilizar ayudantes de credenciales.
git config --global credential.helper ''cache --timeout=x''
donde x
es el número de segundos.
Recibí mi respuesta de gitcredentials (7) Manual Page . Para mi caso, no tengo caché de credenciales en mi instalación de Windows; Yo uso credencial-tienda.
Después de usar el almacén de credenciales, el nombre de usuario / contraseña se almacenan en el archivo [carpeta de usuario] / .git-credentials. Para eliminar el nombre de usuario / contraseña, simplemente elimine el contenido del archivo.
Sé que esta no es una solución segura, pero a veces solo necesita una solución simple, sin instalar nada más. Y como helper = store no me funcionó, creé un ayudante ficticio:
Cree un script y póngalo en la carpeta bin de sus usuarios, aquí denominado credfake , este script le proporcionará su nombre de usuario y su contraseña:
#!/bin/bash
while read line
do
echo "$line"
done < "/dev/stdin"
echo username=mahuser
echo password=MahSecret12345
hazlo ejecutable:
chmod u+x /home/mahuser/bin/credfake
luego configurarlo en git:
git config --global credential.helper /home/mahuser/bin/credfake
(o úselo sin --global para un solo repositorio)
y - voilá - git usará esta contraseña de usuario.
Se debe usar un token de autenticación en lugar de la contraseña de la cuenta. Vaya a la configuración / aplicaciones de GitHub y luego cree un token de acceso personal. El token se puede utilizar de la misma manera que se usa una contraseña.
El token está destinado a permitir que los usuarios no utilicen la contraseña de la cuenta para el trabajo del proyecto. Utilice la contraseña solo cuando realice tareas de administración, como crear tokens nuevos o revocar tokens antiguos.
En lugar de un token o contraseña que otorga a un usuario acceso completo a una cuenta de GitHub, se puede usar una clave de implementación específica del proyecto para otorgar acceso a un solo repositorio de proyectos. Se puede configurar un proyecto de Git para usar esta clave diferente en los siguientes pasos cuando aún puede acceder a otras cuentas o proyectos de Git con su credencial normal:
- Escriba un archivo de configuración SSH que contenga el
Host
,IdentityFile
para la clave de implementación, tal vezUserKnownHostsFile
, y tal vez elUser
(aunque creo que no lo necesita). - Escriba un script de shell de contenedor SSH que virtualmente sea
ssh -F /path/to/your/config $*
-
GIT_SSH=/path/to/your/wrapper
frente a su comando normal de Git. Aquí, elgit remote
(origen) debe usar el[email protected]:user/project.git
.
Si no desea almacenar su contraseña en texto sin formato como dijo Mark, puede usar una URL de GitHub diferente para la obtención de datos que para enviar. En su archivo de configuración, bajo [remote "origin"]
:
url = git://github.com/you/projectName.git
pushurl = [email protected]:you/projectName.git
Todavía solicitará una contraseña cuando presione, pero no cuando obtenga, al menos para proyectos de código abierto.
Simplemente incluya las credenciales de inicio de sesión como parte de la URL:
git remote rm origin
git remote add origin https://username:[email protected]/path/to/repo.git
Solo puedes usar
git config credential.helper store
La próxima vez que ingrese la contraseña con pull o push, se almacenará en .git-credentials como texto simple (un poco inseguro, pero simplemente póngalo en una carpeta protegida)
Y eso es todo, como se indica en esta página:
También edita el archivo bashrc y agrega un script en él.
Esto le pedirá su contraseña una vez cuando inicie Git y luego la recuerde hasta que cierre la sesión.
SSH_ENV=$HOME/.ssh/environment
# Start the ssh-agent
function start_agent {
echo "Initializing new SSH agent..."
# Spawn ssh-agent
/usr/bin/ssh-agent | sed ''s/^echo/#echo/'' > "${SSH_ENV}"
echo succeeded
chmod 600 "${SSH_ENV}"
. "${SSH_ENV}" > /dev/null
/usr/bin/ssh-add
}
if [ -f "${SSH_ENV}" ]; then
. "${SSH_ENV}" > /dev/null
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi
También puede hacer que Git almacene sus credenciales permanentemente utilizando lo siguiente:
git config credential.helper store
Nota: Si bien esto es conveniente, Git almacenará sus credenciales en texto sin cifrar en un archivo local (.git-credenciales) en el directorio de su proyecto (consulte a continuación el directorio "principal"). Si no le gusta esto, elimine este archivo y cambie a usar la opción de caché.
Si desea que Git continúe pidiéndole credenciales cada vez que necesite conectarse al repositorio remoto, puede ejecutar este comando:
git config --unset credential.helper
Para almacenar las contraseñas en .git-credentials
en su directorio %HOME%
en lugar del directorio del proyecto: use la --global
git config --global credential.helper store
Utilice una tienda de credenciales.
Para Git 2.11+ en OS X y Linux , use el almacén de credenciales incorporado de Git :
git config --global credential.helper libsecret
Para msysgit 1.7.9+ en Windows :
git config --global credential.helper wincred
Para Git 1.7.9+ en OS X use:
git config --global credential.helper osxkeychain