Autenticarse con GitHub usando un token

118

Estoy intentando autenticarme con GitHub usando un token de acceso personal. En los archivos de ayuda en github, indica que se debe usar el método cURL para autenticarse ( https://help.github.com/articles/creating-an-access-token-for-command-line-use ). He intentado esto, pero todavía no puedo enviarlo a GitHub. Tenga en cuenta que estoy intentando enviar desde un servidor no autenticado (Travis-CI).

cd $HOME
git config --global user.email "[email protected]"
git config --global user.name "username"

curl -u "username:<MYTOKEN>" https://github.com/username/ol3-1.git
git clone --branch=gh-pages https://github.com/username/ol3-1.git gh-pages

cd gh-pages
mkdir buildtest
cd buildtest
touch asdf.asdf

git add -f .
git commit -m "Travis build $TRAVIS_BUILD_NUMBER pushed to gh-pages"
git push -fq origin gh-pages

Este código causa los errores:

remoto: acceso anónimo a scuzzlebuzzle / ol3-1.git denegado.

fatal: la autenticación falló para ' https://github.com/scuzzlebuzzle/ol3-1.git/ ' "

camino del futuro
fuente

Respuestas:

191

Tu curlcomando está completamente equivocado. Deberías usar lo siguiente

curl -H 'Authorization: token <MYTOKEN>' ...

Aparte de eso, eso no autoriza a su computadora a clonar el repositorio si de hecho es privado. (Sin embargo, echar un vistazo indica que no lo es). Lo que normalmente haría es lo siguiente:

git clone https://scuzzlebuzzle:<MYTOKEN>@github.com/scuzzlebuzzle/ol3-1.git --branch=gh-pages gh-pages

Eso agregará sus credenciales al control remoto creado al clonar el repositorio. Desafortunadamente, sin embargo, no tiene control sobre cómo Travis clona su repositorio, por lo que debe editar el control remoto así.

# After cloning
cd gh-pages
git remote set-url origin https://scuzzlebuzzle:<MYTOKEN>@github.com/scuzzlebuzzle/ol3-1.git

Eso arreglará su proyecto para usar un control remoto con credenciales integradas.

Advertencia: los tokens tienen acceso de lectura / escritura y deben tratarse como contraseñas. Si ingresa su token en la URL de clonación al clonar o agregar un control remoto,Git writes it to your .git/config file in plain text, which is a security risk.

Ian Stapleton Cordasco
fuente
Muchas gracias por tu ayuda. Funcionó muy bien. Aquí hay una copia de mi archivo modificado: github.com/scuzzlebuzzle/ol3-1/blob/master/util/s.sh . Lo tengo bastante cerca. Por alguna razón, no empujó al directorio build1 que creé, pero aún así se empujó al directorio build, ¡así que funcionó! ¡GRACIAS!
wayofthefuture
1
No sé de qué botón del editor estás hablando, pero es absolutamente necesario quitar el control remoto original.
Ian Stapleton Cordasco
1
Je. Frio. Encantado de ayudar.
Ian Stapleton Cordasco
4
No tiene que manejar el control remoto, puede usar set-url en su lugar, como engit remote set-url origin https://scuzzlebuzzle:<MYTOKEN>@github.com/scuzzlebuzzle/ol3-1.git
berkus
1
Enfoque inseguro. Llave fácilmente a los registros en caso de error. En su lugar, utilice una clave de implementación de ámbito estricto.
Joseph Lust
53

Primero, debe crear un token de acceso personal (PAT). Esto se describe aquí: https://help.github.com/articles/creating-an-access-token-for-command-line-use/

De manera risible, el artículo le dice cómo crearlo, pero no da absolutamente ninguna idea de qué hacer con él. Después de aproximadamente una hora de búsqueda de documentación y Stack Overflow, finalmente encontré la respuesta:

$ git clone https://github.com/user-or-organisation/myrepo.git
Username: <my-username>
Password: <my-personal-access-token>

De hecho, me vi obligado a habilitar la autenticación de dos factores por política de la empresa mientras trabajaba de forma remota y todavía tenía cambios locales, por lo que, de hecho, no era lo cloneque necesitaba, pero push. Leí en muchos lugares que necesitaba eliminar y recrear el control remoto, pero de hecho mi pushcomando normal funcionó exactamente igual que el cloneanterior y el control remoto no cambió:

$ git push https://github.com/user-or-organisation/myrepo.git
Username: <my-username>
Password: <my-personal-access-token>

(@YMHuang me puso en el camino correcto con el enlace de documentación).

Escalón
fuente
Gracias por eso, también me enfrentaba a la misma tarea
Surya Prakash Patel
Perfectamente bien.
Samim Aftab Ahmed
Probé varias veces este enfoque, pero me enfrento al mismo problema. Generé el PTA y luego intenté autenticarme después de la ejecución del comando push, poniendo mi nombre de usuario y mi token. Todavía me dice que las credenciales son incorrectas. ¿Qué me falta en estos pasos?
johnny_kb
30

Para no entregar "las llaves del castillo" ...

Tenga en cuenta que la respuesta de sigmavirus24 requiere que le dé a Travis un token con permisos bastante amplios, ya que GitHub solo ofrece tokens con alcances amplios como "escribir todos mis repositorios públicos" o "escribir todos mis repositorios privados".

Si desea restringir el acceso (¡con un poco más de trabajo!), Puede usar las claves de implementación de GitHub combinadas con los campos yaml cifrados de Travis.

Aquí hay un bosquejo de cómo funciona la técnica ...

Primero genere una clave de implementación RSA (vía ssh-keygen) llamada my_keyy agréguela como una clave de implementación en la configuración de su repositorio de github.

Luego...

$ password=`openssl rand -hex 32`
$ cat my_key | openssl aes-256-cbc -k "$password" -a  > my_key.enc
$ travis encrypt --add password=$password -r my-github-user/my-repo

Luego use el $passwordarchivo para descifrar su clave de implementación en el momento de la integración, agregando a su archivo yaml:

before_script: 
  - openssl aes-256-cbc -k "$password" -d -a -in my_key.enc -out my_deploy_key
  - echo -e "Host github.com\n  IdentityFile /path/to/my_deploy_key" > ~/.ssh/config
  - echo "github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==" > ~/.ssh/known_hosts

Nota: la última línea rellena previamente la clave RSA de github, lo que evita la necesidad de aceptar manualmente en el momento de la conexión.

Tonterías
fuente
30

Automatización / automatización de Git con tokens OAuth

$ git clone https://github.com/username/repo.git
  Username: your_token
  Password:

También funciona en el git pushcomando.

Referencia: https://help.github.com/articles/git-automation-with-oauth-tokens/

John Huang
fuente
4
La clave es configurar git para que no sea necesario que se le solicite su token en todo momento, como se describe aquí: help.github.com/articles/caching-your-github-password-in-git Otras respuestas a esta pregunta terminará escribiendo su token en texto plano en .git / config, lo que podría considerarse un riesgo de seguridad.
Jerome
gran referencia - txs!
dalcam
encantadoras gracias https: // <mytoken> @mygiturl funcionó de maravilla en mi .git \ config
Tyeth
22

Esto funcionó para mí usando ssh :

ConfiguraciónConfiguración de desarrolladorGenerar nuevo token .

git remote set-url origin https://[APPLICATION]:[NEW TOKEN]@github.com/[ORGANISATION]/[REPO].git
ccreedon1
fuente
2
Esto también funciona para tokens de acceso personal usando este formato:git remote add origin https://[USERNAME]:[NEW TOKEN]@github.com/[USERNAME]/[REPO].git
CommandZ
Tuve que hacergit remote add origin https://[USERNAME]:[TOKEN]@git.mycompany.com/[ORGANIZATION]/[REPO].git
pacoverflow
¿No es mala idea? ¿No se almacenará en caché el token en el historial de la consola?
TheRealChx101
También funcionó para mí git remote add origin https: // [TOKEN] @ git.mycompany.com / [ORGANIZATION] / [REPO] .git
Thomas Chafiol
@ TheRealChx101 Puede usar algo como git remote set-url origin https://[TOKEN]@git.mycompany.com/[ORGANIZATION]/[REPO].git> /dev/null 2>&1para evitar el registro de salida git insegura. Almacene el token en una variable para evitar tenerlo en el registro. Pero debe almacenarse en algún lugar. Para asegurar aún más, puede almacenarlo cifrado. Este enfoque, por ejemplo, es compatible con Travis CI.
kap
3

Normalmente me gusta esto

 git push https://$(git_token)@github.com/user_name/repo_name.git

El git_token está leyendo de la configuración de la variable en Azure DevOps.

Puedes leer mi blog completo aquí

Tony Ngo
fuente
1

Después de haber luchado con este problema durante casi un día completo de codificación dura en la sección ORG / REPO en nuestro script de compilación, obteniendo el temido error 'remoto no encontrado', finalmente encontré una solución funcional para usar el TRAVIS_REPO_SLUG. Cambiar esto por los atributos codificados funcionó de inmediato.

git remote set-url origin https://[ORG]:${TOKEN}@github.com/${TRAVIS_REPO_SLUG}
mdmjsh
fuente
0

Al haber luchado tantas horas para aplicar el token de GitHub, finalmente funciona de la siguiente manera:

$ cf_export GITHUB_TOKEN=$(codefresh get context github --decrypt -o yaml | yq -y .spec.data.auth.password)

  • el código sigue la guía de Codefresh sobre la clonación de un repositorio usando token (estilo libre)
  • prueba realizada: sed %d%H%M en la palabra coincidente'-123456-whatever'
  • retroceder al repositorio (que es un repositorio privado )
  • desencadenado por los webhooks de DockerHub

A continuación se muestra el código completo:

version: '1.0'
steps:
  get_git_token:
    title: Reading Github token
    image: codefresh/cli
    commands:
      - cf_export GITHUB_TOKEN=$(codefresh get context github --decrypt -o yaml | yq -y .spec.data.auth.password)
  main_clone:
    title: Updating the repo
    image: alpine/git:latest
    commands:
      - git clone https://chetabahana:[email protected]/chetabahana/compose.git
      - cd compose && git remote rm origin
      - git config --global user.name "chetabahana"
      - git config --global user.email "[email protected]"
      - git remote add origin https://chetabahana:[email protected]/chetabahana/compose.git
      - sed -i "s/-[0-9]\{1,\}-\([a-zA-Z0-9_]*\)'/-`date +%d%H%M`-whatever'/g" cloudbuild.yaml
      - git status && git add . && git commit -m "fresh commit" && git push -u origin master

Salida...

On branch master 
Changes not staged for commit: 
  (use "git add ..." to update what will be committed) 
  (use "git checkout -- ..." to discard changes in working directory) 

modified:   cloudbuild.yaml 

no changes added to commit (use "git add" and/or "git commit -a") 
[master dbab20f] fresh commit 
 1 file changed, 1 insertion(+), 1 deletion(-) 
Enumerating objects: 5, done. 
Counting objects:  20% (1/5) ...  Counting objects: 100% (5/5), done. 
Delta compression using up to 4 threads 
Compressing objects:  33% (1/3) ... Writing objects: 100% (3/3), 283 bytes | 283.00 KiB/s, done. 
Total 3 (delta 2), reused 0 (delta 0) 
remote: Resolving deltas:   0% (0/2)  ...   (2/2), completed with 2 local objects. 
To https://github.com/chetabahana/compose.git 
   bbb6d2f..dbab20f  master -> master 
Branch 'master' set up to track remote branch 'master' from 'origin'. 
Reading environment variable exporting file contents. 
Successfully ran freestyle step: Cloning the repo 
Chetabahana
fuente
0

La contraseña que usa para iniciar sesión en el portal github.com no funciona en VS Code CLI / Shell. Debe copiar PAT Token de la URL https://github.com/settings/tokens generando un nuevo token y pegar esa cadena en CLI como contraseña.

Kanna Reddy
fuente
0

Si está usando GitHub Enterprise y clonar el repositorio o presionar le da un error 403 en lugar de solicitar un nombre de usuario / token, puede usar esto:

  1. Eliminar el repositorio
  2. Abra el símbolo del sistema y navegue a la carpeta en la que desea el repositorio
  3. Tipo:
git clone https://[USERNAME]:[TOKEN]@[GIT_ENTERPRISE_DOMAIN]/[ORGANIZATION]/[REPO].git
Gigazelle
fuente