gui - git repository
¿Cómo proporcionar el nombre de usuario y la contraseña cuando se ejecuta "git clone [email protected]"? (6)
El user@host:path/to/repo
formato user@host:path/to/repo
le dice a Git que use ssh para iniciar sesión con el usuario con nombre de user
. De git help clone
:
También se puede usar una sintaxis similar a scp con el protocolo ssh:
[user@]host.xz:path/to/repo.git/
La parte anterior a @
es el nombre de usuario, y ssh, no Git, determina el método de autenticación (contraseña, clave pública, etc.). Git no tiene forma de pasar una contraseña a ssh, ya que ssh ni siquiera puede usar una contraseña dependiendo de la configuración del servidor remoto.
Use ssh-agent
para evitar escribir contraseñas todo el tiempo
Si no desea escribir su contraseña ssh todo el tiempo, la solución típica es generar un par de claves pública / privada , poner la clave pública en su archivo ~/.ssh/authorized_keys
en el servidor remoto y cargar su clave privada. clave en ssh-agent
. También vea Configuración de Git sobre SSH para iniciar sesión una vez , la página de ayuda de GitHub en las frases de contraseña de ssh key , la documentación de ssh de gitolite y la documentación de ssh keys de Heroku .
Elegir entre varias cuentas en GitHub (o Heroku o ...)
Si tiene varias cuentas en un lugar como GitHub o Heroku, tendrá varias claves ssh (al menos una por cuenta). Para elegir la cuenta en la que desea iniciar sesión, debe indicar a ssh qué clave privada usar .
Por ejemplo, supongamos que tienes dos cuentas de GitHub: foo
y bar
. Su clave ssh para foo
es ~/.ssh/foo_github_id
y su clave ssh para bar
es ~/.ssh/bar_github_id
. Desea acceder a [email protected]:foo/foo.git
con su cuenta de foo
y [email protected]:bar/bar.git
con su cuenta de bar
. Usted agregaría lo siguiente a su ~/.ssh/config
:
Host gh-foo
Hostname github.com
User git
IdentityFile ~/.ssh/foo_github_id
Host gh-bar
Hostname github.com
User git
IdentityFile ~/.ssh/bar_github_id
Luego clonarías los dos repositorios de la siguiente manera:
git clone gh-foo:foo/foo.git # logs in with account foo
git clone gh-bar:bar/bar.git # logs in with account bar
Evitando ssh por completo
Algunos servicios proporcionan acceso HTTP como alternativa a ssh:
GitHub:
https://username:[email protected]/username/repository.git
Gitorious:
https://username:[email protected]/project/repository.git
Heroku: Ver este artículo de soporte .
ADVERTENCIA : Agregar su contraseña a la URL de clonación hará que Git almacene su contraseña de texto .git/config
en .git/config
. Para almacenar de forma segura su contraseña al usar HTTP, use un asistente de credenciales. Por ejemplo:
git config --global credential.helper cache
git config --global credential.https://github.com.username foo
git clone https://github.com/foo/repository.git
Lo anterior hará que Git solicite su contraseña una vez cada 15 minutos (de forma predeterminada). Ver git help credentials
para más detalles.
Sé cómo proporcionar un nombre de usuario y contraseña para una solicitud https como esta:
git clone https://username:password@remote
Pero me gustaría saber cómo proporcionar un nombre de usuario y contraseña para el control remoto de esta manera:
git clone [email protected]
He intentado así:
git clone username:password@[email protected]
git clone git@username:[email protected]
git clone [email protected]@username:password
Pero no han funcionado.
En los comentarios de @ Bassetassen, @plosco mencionó que puede usar git clone https://<token>@github.com/username/repository.git
para clonar desde GitHub como mínimo. Pensé que me expandiría sobre cómo hacerlo, en caso de que alguien encuentre esta respuesta como lo hice al intentar automatizar algo de clonación.
GitHub tiene una guía muy útil sobre cómo hacer esto, pero no cubre qué hacer si desea incluirlo todo en una sola línea con fines de automatización. Advierte que agregar el token a la URL de clonación lo almacenará en texto sin formato en .git/config
. Esto obviamente es un riesgo de seguridad para casi todos los casos de uso, pero como planeo eliminar el repositorio y revocar el token cuando termine, no me importa.
1. Crea un Token
GitHub tiene toda una guía aquí sobre cómo obtener un token, pero aquí está el TL; DR.
- Vaya a Configuración> Configuración de desarrollador> Tokens de acceso personal ( aquí hay un enlace directo )
- Haga clic en "Generar un nuevo token" e ingrese su contraseña nuevamente. (aquí hay otro enlace directo )
- Establece una descripción / nombre para ello, verifica el permiso de "repo" y presiona el botón "Generar token" en la parte inferior de la página.
- Copia tu nuevo token antes de salir de la página.
2. Clona el Repo
Igual que el comando que dio @plosco, git clone https://<token>@github.com/<username>/<repository>.git
, simplemente reemplace <token>
, <username>
y <repository>
con cualquiera que sea su información .
Si desea clonarlo en una carpeta específica, simplemente inserte la dirección de la carpeta al final de la siguiente manera: git clone https://<token>@github.com/<username>/<repository.git> <folder>
, donde <folder>
es, lo has adivinado, la carpeta para clonarla! Por supuesto que puedes usar .
, ..
, ~
, etc. aquí como puedes en otro lado.
3. No dejar rastro
No todo esto puede ser necesario, dependiendo de lo sensible que sea lo que esté haciendo.
- Probablemente no querrá dejar ese token colgado si no tiene intenciones de usarlo durante algún tiempo, así que regrese a la página de tokens y presione el botón de eliminar que se encuentra al lado.
- Si no necesita el repositorio de nuevo, elimínelo
rm -rf <folder>
. - Si necesita el repositorio nuevamente, pero no necesita automatizarlo nuevamente, puede eliminar el control remoto haciendo
git remote remove origin
o simplemente eliminar el token ejecutandogit remote set-url origin https://github.com/<username>/<repository.git>
. - Borre su historial de bash para asegurarse de que el token no permanezca registrado allí. Hay muchas maneras de hacer esto, vea esta pregunta y esta pregunta . Sin embargo, puede ser más fácil simplemente anteponer todos los comandos anteriores con un espacio para evitar que se almacenen, para empezar.
Tenga en cuenta que no soy un profesional, por lo que lo anterior puede no ser seguro en el sentido de que no se dejará rastro para ningún tipo de trabajo forense.
git clone https://username:[email protected]/username/repository.git
Así me funcionó desde un repositorio de github.
Edición basada en el comentario de Michael_Scharf:
Puede omitir la contraseña para que no se registre su archivo de historial de bash:
git clone https://[email protected]/username/repository.git
Le pedirá su contraseña
git config --global core.askpass
Ejecute esto primero antes de clonar de la misma manera, debe ser arreglado!