keygen generate generar clave git ssh gitolite

git - generate - ssh-keygen linux



Especifique una clave SSH para git push para un dominio dado (8)

En sistemas basados ​​en Unix (Linux, BSD, Mac OS X), la identidad predeterminada se almacena en el directorio $ HOME / .ssh , en 2 archivos: private key: $HOME/.ssh/id_rsa public key: $HOME/.ssh/id_rsa.pub Cuando usa ssh sin la opción -i , usa la clave privada predeterminada para autenticarse con el sistema remoto.

Si tiene otra clave privada que desea usar, por ejemplo, $ HOME / .ssh / deploy_key , debe usar ssh -i ~/.ssh/deploy_key ...

Esto es molesto. Puede agregar las siguientes líneas a su $ HOME / .bash_profile : ssh-add ~/.ssh/deploy_key ssh-add ~/.ssh/id_rsa

Así que cada vez que usas ssh o git o scp (básicamente ssh también), ya no tienes que usar la opción -i .

Puede agregar tantas claves como desee en el archivo $ HOME / .bash_profile .

Tengo el siguiente caso de uso: me gustaría poder [email protected]:gitolite-admin a [email protected]:gitolite-admin usando la clave privada del usuario gitolite-admin , mientras que quiero [email protected]:some_repo a [email protected]:some_repo usando ''mi propia'' clave privada. AFAIK, no puedo resolver esto usando ~/.ssh/config , porque el nombre de usuario y el nombre del servidor son idénticos en ambos casos. Como principalmente uso mi propia clave privada, la tengo definida en ~/.ssh/config para [email protected] . ¿Alguien sabe de una manera de anular la clave que se usa para una sola invocación de git ?

(Además: gitolite distingue quién está presionando en función de la clave, por lo que no es un problema, en términos de acceso, propiedad y auditoría, que la cadena de @ servidor sea idéntica para diferentes usuarios).


Es posible que deba eliminar (o comentar) la configuración predeterminada del host


Estoy usando Git Bash en Win7. Lo siguiente funcionó para mí.

Cree un archivo de configuración en ~ / .ssh / config o c: / users / [nombre_de_usuario] / .ssh / config. En el archivo introduzca:

Host your_host.com IdentityFile [absolute_path_to_your_.ssh]/id_rsa

Supongo que el host debe ser una URL y no solo un "nombre" o referencia para su host. Por ejemplo,

Host github.com IdentityFile c:/users/[user_name]/.ssh/id_rsa

La ruta también se puede escribir en el formato / c / users / [nombre_usuario] / ....

La solución proporcionada por Giordano Scalzo también es genial. https://.com/a/9149518/1738546


Incluso si el usuario y el host son iguales, aún se pueden distinguir en ~/.ssh/config . Por ejemplo, si su configuración se ve así:

Host gitolite-as-alice HostName git.company.com User git IdentityFile /home/whoever/.ssh/id_rsa.alice IdentitiesOnly yes Host gitolite-as-bob HostName git.company.com User git IdentityFile /home/whoever/.ssh/id_dsa.bob IdentitiesOnly yes

Luego solo usa gitolite-as-alice y gitolite-as-bob lugar del nombre de host en su URL:

git remote add alice git@gitolite-as-alice:whatever.git git remote add bob git@gitolite-as-bob:whatever.git

Nota

Desea incluir la opción IdentitiesOnly yes para evitar el uso de identificadores predeterminados. De lo contrario, si también tiene archivos de identificación que coincidan con los nombres predeterminados, se probarán primero porque, a diferencia de otras opciones de configuración (que cumplen con "first in wins"), la opción IdentityFile agrega a la lista de identidades que debe probar. Consulte: https://serverfault.com/questions/450796/how-could-i-stop-ssh-offering-a-wrong-key/450807#450807


Otra alternativa es usar ssh-ident, para administrar sus identidades ssh .

Automáticamente carga y usa diferentes claves en función de su directorio de trabajo actual, las opciones de ssh, etc. ... lo que significa que puede tener fácilmente un directorio de trabajo / privado y privado / que termine de forma transparente utilizando diferentes claves e identidades con ssh.


Puede utilizar la variable de entorno git GIT_SSH_COMMAND . Ejecuta esto en tu terminal bajo tu repositorio de git:

GIT_SSH_COMMAND=''ssh -i ~/.ssh/your_private_key'' git submodule update --init

Reemplace ~/.ssh/your_private_key con la ruta de acceso de la clave privada ssh que desea usar. Y puede cambiar el siguiente comando git (en el ejemplo es git submodule update --init ) a otros como git pull , git fetch , etc.


Si usa la versión de ssh de Git en Windows, la línea del archivo de identidad en la configuración de ssh parece

IdentityFile /c/Users/Whoever/.ssh/id_rsa.alice

donde /c es para c:

Para comprobar, en bash git do

cd ~/.ssh pwd


Un enfoque alternativo al ofrecido anteriormente por Mark Longair es usar un alias que ejecute cualquier comando git, en cualquier control remoto, con una clave SSH alternativa. La idea es básicamente cambiar su identidad SSH al ejecutar los comandos git.

Ventajas relativas al enfoque de alias de host en la otra respuesta:

  • Funcionará con cualquier comando o alias de git, incluso si no puede especificar el remote explícitamente.
  • Es más fácil trabajar con muchos repositorios porque solo necesita configurarlo una vez por equipo cliente, no una vez por repositorio en cada equipo cliente.

Utilizo algunos scripts pequeños y un admin alias de git. De esa manera puedo hacer, por ejemplo:

git admin push

Para ingresar al control remoto predeterminado con la clave SSH alternativa ("admin"). De nuevo, puedes usar cualquier comando (no solo push ) con este alias. Incluso podría hacer git admin clone ... para clonar un repositorio al que solo tendría acceso para usar su clave "admin".

Paso 1: cree las claves SSH alternativas y, opcionalmente, establezca una frase de contraseña en caso de que esté haciendo esto en la máquina de otra persona.

Paso 2: crea un script llamado "ssh-as.sh" que ejecuta cosas que usan SSH, pero usa una clave SSH dada en lugar de la predeterminada:

#!/bin/bash exec ssh ${SSH_KEYFILE+-i "$SSH_KEYFILE"} "$@"

Paso 3: Cree un script llamado "git-as.sh" que ejecute los comandos de git usando la clave SSH dada.

#!/bin/bash SSH_KEYFILE=$1 GIT_SSH=${BASH_SOURCE%/*}/ssh-as.sh exec git "${@:2}"

Paso 4: agregue un alias (usando algo apropiado para "PATH_TO_SCRIPTS_DIR" a continuación):

# Run git commands as the SSH identity provided by the keyfile ~/.ssh/admin git config --global alias.admin /!"PATH_TO_SCRIPTS_DIR/git-as.sh ~/.ssh/admin"

Más detalles en: http://noamlewis.wordpress.com/2013/01/24/git-admin-an-alias-for-running-git-commands-as-a-privileged-ssh-identity/