cd ~ #Your home directory
ssh-keygen -t rsa #Press enter for all values
Para ventanas
(Solo funciona si el programa commit es capaz de usar certificados / claves ssh privadas y públicas)
Usa Putty Gen para generar una clave
Exporte la clave como una clave SSH abierta
Aquí hay un tutorial sobre masilla gen para los pasos anteriores
2. Asociar la clave SSH con el repositorio remoto
Este paso varía, dependiendo de cómo esté configurado su control remoto.
Si es un repositorio de GitHub y tiene privilegios administrativos, vaya a la configuración y haga clic en 'agregar clave SSH'. Copie el contenido de su ~/.ssh/id_rsa.puben el campo etiquetado 'Clave'.
Si su repositorio es administrado por otra persona, dele al administrador su id_rsa.pub.
Si su repositorio remoto es administrado por usted, puede usar este comando, por ejemplo:
Gracias. ¿Puede explicar qué hace el comando config? Me pregunto por qué ni siquiera me pide una contraseña la primera vez que presiono a un repositorio.
HelloWorldNoMore
1
@vivoconunxino Probablemente porque es inherentemente inseguro. Desde la página del gitmanual: "El uso de este asistente almacenará sus contraseñas sin cifrar en el disco, protegidas solo por los permisos del sistema de archivos".
cmaster - reinstalar a monica el
15
A esta respuesta le falta una advertencia sobre el storeasistente de credenciales que almacena la contraseña en el disco sin cifrar.
Esto es lo que solucionó mi problema después de haberlo usado git initlocalmente, luego intenté presionar después de agregar el control remoto desde un nuevo repositorio en el sitio web de GitHub.
sheldonkreger
1
No estoy seguro de por qué esto no es parte de la respuesta aceptada. ¡Gracias!
jwalk
1
La respuesta aceptada debe estar compuesta por la respuesta aceptada real MÁS esta.
Puce
3
Puede omitir "git + ssh: //" y simplemente usar[email protected]/username/reponame.git
Ivan Shulev
1
@IvanShulev Intenté inicialmente sin git + ssh y no funcionó
Antonello
40
Simplemente use la --repoopción para el comando git push. Me gusta esto:
El uso de este asistente almacenará sus contraseñas sin cifrar en el disco, protegidas solo por los permisos del sistema de archivos. Si esto no es una compensación de seguridad aceptable, intente con git-credential-cache o busque un ayudante que se integre con el almacenamiento seguro proporcionado por su sistema operativo.
Con un tiempo de espera
Use el git-credential-cache que por defecto almacena la contraseña durante 15 minutos.
git config credential.helper cache
para establecer un tiempo de espera diferente, use --timeout(aquí 5 minutos)
Si está utilizando una Mac, Git viene con un modo "osxkeychain" , que almacena las credenciales en el llavero seguro que está conectado a su cuenta del sistema. Este método almacena las credenciales en el disco y nunca caducan, pero están encriptadas con el mismo sistema que almacena los certificados HTTPS y los rellenos automáticos de Safari. Ejecutar lo siguiente en la línea de comando habilitará esta función:git config --global credential.helper osxkeychain . Tendrá que almacenar las credenciales en el llavero usando la aplicación Llavero también.
Si está utilizando Windows, puede instalar un asistente llamado "Git Credential Manager para Windows". Esto es similar al ayudante "osxkeychain" descrito anteriormente, pero utiliza el Windows Credential Store para controlar la información confidencial. Se puede encontrar en https://github.com/Microsoft/Git-Credential-Manager-for-Windows . [enfatiza el mío]
Solo quería señalar algo sobre la solución que se dijo anteriormente varias veces:
git config credential.helper store
Puede usar cualquier comando que requiera una contraseña después de esto. No tienes que empujar. (también puede extraer, por ejemplo) Después de eso, no necesitará escribir su nombre de usuario / contraseña nuevamente.
Usé la respuesta que sugirió Pavel y funcionó para mí. Mi diferencia fue hacerlo mientras agregaba el control remoto así:git remote add (alias) https://(name:password)@github.com/(the remote address).git
cat ~/.ssh/id_rsa.pub, péguelo allí, nómbrelo y guárdelo (si no tiene ese archivo, genere uno para usted ssh-keygen -t rsasimplemente ingresando para todas las indicaciones);
Vaya a su repositorio local y actualice su control remoto git remote set-url origin git+ssh://[email protected]/username/reponame.git: puede verificarlo primerogit remote -v );
Aquí tienes, solo touch t; git add t; git commit -m "test"; git pushy confirma que sí para disfrutar del mundo sin contraseña .
passwd Cifrado usando un almacén de claves
Si solo lo usa git config --global credential.helper storecomo otros mencionaron, sus contraseñas no cifradas se almacenarán en un texto sin formato en el ~/.git-credentialsque no es seguro como parece.
Intenta encriptarlo como
sudo apt-get install libgnome-keyring-dev
sudo make --directory=/usr/share/doc/git/contrib/credential/gnome-keyring
git config --global credential.helper /usr/share/doc/git/contrib/credential/gnome-keyring/git-credential-gnome-keyring
git config --global credential.helper store
En este caso, lo estás usando https://[email protected]/username/reponame.git.
Si su PC es segura o no le importa la seguridad de la contraseña, esto se puede lograr de manera muy simple. Suponiendo que el repositorio remoto está en GitHub y origines su nombre local para el repositorio remoto, use este comando
El --pushindicador garantiza que esto cambie la URL del repositorio solo para el git pushcomando. (La pregunta que se hizo en la publicación original es git pushsolo sobre el comando. Requerir un nombre de usuario + contraseña solo para operaciones push es la configuración normal para público repositorios en GitHub. Tenga en cuenta que los repositorios privados en GitHub también requerirían un nombre de usuario + contraseña para las operaciones de extracción y extracción , por lo que para un repositorio privado no querrá usar el --push flag...)
ADVERTENCIA: Esto es inherentemente inseguro porque:
su ISP, o cualquier persona que registre sus accesos a la red, puede ver fácilmente la contraseña en texto plano en la URL;
Cualquier persona que tenga acceso a su PC puede ver su contraseña usando git remote show origin.
Es por eso que usar una clave SSH es la respuesta aceptada.
Incluso una clave SSH no es totalmente segura . Cualquiera que obtenga acceso a su PC aún puede, por ejemplo, hacer cambios que destruyen su repositorio o, lo que es peor, enviar confirmaciones haciendo cambios sutiles en su código. (Todos los commits empujados son obviamente muy visibles en GitHub. Pero si alguien quisiera cambiar su código subrepticiamente, podrían--amend un commit previo sin cambiar el mensaje de commit, y luego forzarlo a empujarlo. Eso sería sigiloso y bastante difícil de notar en la práctica. )
Pero revelar su contraseña es peor . Si un atacante conoce su nombre de usuario + contraseña, puede hacer cosas como bloquearlo de su propia cuenta, eliminar su cuenta, eliminar permanentemente el repositorio, etc.
Alternativamente, por simplicidad y seguridad, puede proporcionar solo su nombre de usuario en la URL, de modo que tendrá que escribir su contraseña cada vez, git pushpero no tendrá que dar su nombre de usuario cada vez. (Me gusta mucho este enfoque, tener que escribir la contraseña me da una pausa para pensar cada vez que lo hago git push, así que no puedo git pushpor accidente).
¿Qué @pasa si la contraseña tiene , está rompiendo el comando pensando contraseña después de @ como parte del servidor git?
Pranav Singh
Si su contraseña contiene '@', está solo aquí, lo siento. ¿Puedes cambiar tu contraseña?
radfast
Necesito hacer una solicitud para cambiar la contraseña, ya que estaba haciendo la automatización para la integración continua con una cuenta de servicio (no personal). En este momento usé SSH Keys para un inicio de sesión seguro
Pranav Singh
1
Todo esto surge porque git no proporciona una opción en los comandos clone / pull / push / fetch para enviar las credenciales a través de una tubería. A pesar de que proporciona credential.helper, se almacena en el sistema de archivos o crea un demonio, etc. A menudo, las credenciales de GIT son de nivel de sistema y la tarea de invocar los comandos de git es responsabilidad de mantenerlos seguros. Muy inseguro de hecho.
Esto es lo que tuve que solucionar. 1. La versión de Git (git --version) debe ser mayor o igual que 1.8.3.
GIT CLONE
Para la clonación, use "git clone URL" después de cambiar la URL del formato, http: // {myuser} @ {my_repo_ip_address} / {myrepo_name.git} a http: // {myuser}: {mypwd} @ {my_repo_ip_address} /{myrepo_name.git}
Luego purgue el repositorio de la contraseña como en la siguiente sección.
PURGANDO
Ahora, esto se habría ido y
escribió la contraseña en el origen remoto de git. Escribe "git remote -v" para ver el daño. Corrija esto configurando la URL de origen remota sin contraseña. "git remote set_url origin http: // {myuser} @ {my_repo_ip_address} / {myrepo_name.git}"
escribió la contraseña en .git / logs en el repositorio. Reemplace todas las instancias de pwd usando un comando unix como find .git / logs -exec sed -i 's / {my_url_with_pwd} // g' {} \; Aquí, {my_url_with_pwd} es la URL con contraseña. Dado que la URL tiene barras diagonales, debe ser escapado por dos barras diagonales. Por ejemplo, para la URL http: // kris: [email protected]/proj.git -> http: \\ / \\ / kris: [email protected] \\ / proj.git
Si su aplicación está utilizando Java para emitir estos comandos, use ProcessBuilder en lugar de Runtime. Si debe usar Runtime, use getRunTime (). Exec que toma la matriz de cadenas como argumentos con / bin / bash y -c como argumentos en lugar de la que toma una sola cadena como argumento.
GIT FETCH / PULL / PUSH
establezca la contraseña en la URL remota de git como: "git remote set_url origin http: // {myuser}: {mypwd} @ {my_repo_ip_address} / {myrepo_name.git}"
Ejecute el comando git fetch / push / pull. Entonces no se le pedirá la contraseña.
Realice la purga como en la sección anterior. No te lo pierdas.
Debe configurar una clave privada SSH, puede revisar esta página , cómo hacer la configuración en Mac, si está en Linux, la guía debería ser casi la misma, en Windows necesitaría una herramienta como MSYS .
Respuestas:
1. Generar una clave SSH
Linux / Mac
Abrir terminal para crear claves ssh:
Para ventanas
(Solo funciona si el programa commit es capaz de usar certificados / claves ssh privadas y públicas)
Aquí hay un tutorial sobre masilla gen para los pasos anteriores
2. Asociar la clave SSH con el repositorio remoto
Este paso varía, dependiendo de cómo esté configurado su control remoto.
Si es un repositorio de GitHub y tiene privilegios administrativos, vaya a la configuración y haga clic en 'agregar clave SSH'. Copie el contenido de su
~/.ssh/id_rsa.pub
en el campo etiquetado 'Clave'.Si su repositorio es administrado por otra persona, dele al administrador su
id_rsa.pub
.Si su repositorio remoto es administrado por usted, puede usar este comando, por ejemplo:
scp ~/.ssh/id_rsa.pub YOUR_USER@YOUR_IP:~/.ssh/authorized_keys/id_rsa.pub
3. Configure su URL remota en un formulario que admita SSH 1
Si ha realizado los pasos anteriores y sigue recibiendo la solicitud de contraseña, asegúrese de que su URL de repositorio esté en el formulario
Opuesto a
Para ver su URL de repositorio, ejecute:
Puede cambiar la URL con:
[1] Esta sección incorpora la respuesta de Eric P
fuente
git remote set-url origin [email protected]:/username/projectname.git
Autenticación permanente con repositorios Git,
Ejecute el siguiente comando para habilitar el almacenamiento en caché de credenciales.
El uso también debe especificar vencimiento del almacenamiento en caché ,
Después de habilitar el almacenamiento en caché de credenciales, se almacenará en caché durante 7200 segundos (2 horas) .
Nota: Credencial auxiliar que almacena la contraseña sin cifrar en el disco local.
fuente
git
manual: "El uso de este asistente almacenará sus contraseñas sin cifrar en el disco, protegidas solo por los permisos del sistema de archivos".store
asistente de credenciales que almacena la contraseña en el disco sin cifrar.git config --unset credential.helper
Si ya tiene configuradas sus claves SSH y todavía recibe la solicitud de contraseña, asegúrese de que su URL de repositorio esté en el formulario
Opuesto a
Para ver su URL de repositorio, ejecute:
Puede cambiar la URL de la siguiente
git remote set-url
manera:fuente
git init
localmente, luego intenté presionar después de agregar el control remoto desde un nuevo repositorio en el sitio web de GitHub.[email protected]/username/reponame.git
Simplemente use la
--repo
opción para el comando git push. Me gusta esto:fuente
git remote set-url origin https://name:[email protected]/repo.git
[email protected]/....git
funciona si no te molesta que te pidan la contraseña cada vez.git push --repo https://github.com/Username/repo
funciona sin la.git
extensiónGuardar indefinidamente
Puede usar git-credential-store a través de
que almacena su contraseña sin cifrar en el sistema de archivos :
Con un tiempo de espera
Use el git-credential-cache que por defecto almacena la contraseña durante 15 minutos.
para establecer un tiempo de espera diferente, use
--timeout
(aquí 5 minutos)Almacenamiento seguro indefinidamente (OS X y Windows)
fuente
credential.helper cache
NO funciona. Debería sergit config --global credential.helper wincred
.Estaba usando el enlace https (
https://github.com/org/repo.git
) en lugar del enlace ssh;¡Cambiar me resolvió el problema!
fuente
Paso 1 -
Cree claves SSH en su sistema Linux usando el siguiente comando
Solicitará la frase de contraseña y el nombre del archivo (el valor predeterminado será ~ / .ssh / id_rsa, ~ / .ssh / id_rsa.pub)
Paso 2 -
Una vez creados los archivos, agregue la clave pública id_rsa.pub a la sección ssh de la cuenta github.
Paso 3 -
En su máquina, agregue la clave privada id_rsa a ssh-agent usando el siguiente comando
Paso 4 -
Ahora agregue la URL remota [email protected]: user_name / repo_name.git a su repositorio local de git usando el siguiente comando.
Eso es.
fuente
Conecte su cliente git a la tienda de credenciales de su sistema operativo. Por ejemplo, en Windows, vincula el asistente de credenciales a wincred:
¿Hay alguna forma de omitir la escritura de contraseñas cuando se usa https: // en GitHub?
fuente
En el sistema operativo Windows, use esto en su lugar, esto funciona para mí:
p.ej
fuente
Solo quería señalar algo sobre la solución que se dijo anteriormente varias veces:
Puede usar cualquier comando que requiera una contraseña después de esto. No tienes que empujar. (también puede extraer, por ejemplo) Después de eso, no necesitará escribir su nombre de usuario / contraseña nuevamente.
fuente
Usé la respuesta que sugirió Pavel y funcionó para mí. Mi diferencia fue hacerlo mientras agregaba el control remoto así:
git remote add (alias) https://(name:password)@github.com/(the remote address).git
fuente
Ejecutar el siguiente comando resolvió el problema para mí.
Consulte la siguiente documentación de github:
fuente
Hasta donde yo sé, hay simplemente dos formas seguras : ssh o passwd encriptadas usando un almacén de claves .
SSH
cat ~/.ssh/id_rsa.pub
, péguelo allí, nómbrelo y guárdelo (si no tiene ese archivo, genere uno para ustedssh-keygen -t rsa
simplemente ingresando para todas las indicaciones);git remote set-url origin git+ssh://[email protected]/username/reponame.git
: puede verificarlo primerogit remote -v
);touch t; git add t; git commit -m "test"; git push
y confirma que sí para disfrutar del mundo sin contraseña .passwd Cifrado usando un almacén de claves
Si solo lo usa
git config --global credential.helper store
como otros mencionaron, sus contraseñas no cifradas se almacenarán en un texto sin formato en el~/.git-credentials
que no es seguro como parece.Intenta encriptarlo como
fuente
Mi solución en Windows:
ssh-keygen -t rsa
(Presione enter para todos los valores)Your public key has been saved in /c/Users/<your_user_name_here>/.ssh/id_rsa.pub
fuente
Si su PC es segura o no le importa la seguridad de la contraseña, esto se puede lograr de manera muy simple. Suponiendo que el repositorio remoto está en GitHub y
origin
es su nombre local para el repositorio remoto, use este comandoEl
--push
indicador garantiza que esto cambie la URL del repositorio solo para elgit push
comando. (La pregunta que se hizo en la publicación original esgit push
solo sobre el comando. Requerir un nombre de usuario + contraseña solo para operaciones push es la configuración normal para público repositorios en GitHub. Tenga en cuenta que los repositorios privados en GitHub también requerirían un nombre de usuario + contraseña para las operaciones de extracción y extracción , por lo que para un repositorio privado no querrá usar el--push flag
...)ADVERTENCIA: Esto es inherentemente inseguro porque:
su ISP, o cualquier persona que registre sus accesos a la red, puede ver fácilmente la contraseña en texto plano en la URL;
Cualquier persona que tenga acceso a su PC puede ver su contraseña usando
git remote show origin
.Es por eso que usar una clave SSH es la respuesta aceptada.
Incluso una clave SSH no es totalmente segura . Cualquiera que obtenga acceso a su PC aún puede, por ejemplo, hacer cambios que destruyen su repositorio o, lo que es peor, enviar confirmaciones haciendo cambios sutiles en su código. (Todos los commits empujados son obviamente muy visibles en GitHub. Pero si alguien quisiera cambiar su código subrepticiamente, podrían
--amend
un commit previo sin cambiar el mensaje de commit, y luego forzarlo a empujarlo. Eso sería sigiloso y bastante difícil de notar en la práctica. )Pero revelar su contraseña es peor . Si un atacante conoce su nombre de usuario + contraseña, puede hacer cosas como bloquearlo de su propia cuenta, eliminar su cuenta, eliminar permanentemente el repositorio, etc.
Alternativamente, por simplicidad y seguridad, puede proporcionar solo su nombre de usuario en la URL, de modo que tendrá que escribir su contraseña cada vez,
git push
pero no tendrá que dar su nombre de usuario cada vez. (Me gusta mucho este enfoque, tener que escribir la contraseña me da una pausa para pensar cada vez que lo hagogit push
, así que no puedogit push
por accidente).fuente
@
pasa si la contraseña tiene , está rompiendo el comando pensando contraseña después de @ como parte del servidor git?Todo esto surge porque git no proporciona una opción en los comandos clone / pull / push / fetch para enviar las credenciales a través de una tubería. A pesar de que proporciona credential.helper, se almacena en el sistema de archivos o crea un demonio, etc. A menudo, las credenciales de GIT son de nivel de sistema y la tarea de invocar los comandos de git es responsabilidad de mantenerlos seguros. Muy inseguro de hecho.
Esto es lo que tuve que solucionar. 1. La versión de Git (git --version) debe ser mayor o igual que 1.8.3.
GIT CLONE
Para la clonación, use "git clone URL" después de cambiar la URL del formato, http: // {myuser} @ {my_repo_ip_address} / {myrepo_name.git} a http: // {myuser}: {mypwd} @ {my_repo_ip_address} /{myrepo_name.git}
Luego purgue el repositorio de la contraseña como en la siguiente sección.
PURGANDO
Ahora, esto se habría ido y
Si su aplicación está utilizando Java para emitir estos comandos, use ProcessBuilder en lugar de Runtime. Si debe usar Runtime, use getRunTime (). Exec que toma la matriz de cadenas como argumentos con / bin / bash y -c como argumentos en lugar de la que toma una sola cadena como argumento.
GIT FETCH / PULL / PUSH
fuente
Debe configurar una clave privada SSH, puede revisar esta página , cómo hacer la configuración en Mac, si está en Linux, la guía debería ser casi la misma, en Windows necesitaría una herramienta como MSYS .
fuente
Parece que, al menos cuando se usa TortoiseGIT en Windows, es posible crear las claves SSH y transferirlas al servidor GIT usando simplemente:
fuente