Especifique una clave SSH para git push para un dominio determinado

Resuelto Confusion asked hace 13 años • 20 respuestas

Tengo el siguiente caso de uso: me gustaría poder presionar para [email protected]:gitolite-adminusar la clave privada de usuario gitolite-admin, mientras quiero presionar para [email protected]:some_repousar '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 uso principalmente mi propia clave privada, la tengo definida en ~/.ssh/configfor [email protected]. ¿Alguien conoce alguna forma de anular la clave que se utiliza para una única gitinvocación?

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

Confusion avatar Oct 28 '11 16:10 Confusion
Aceptado

Incluso si el usuario y el host son los mismos, 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 simplemente usas gitolite-as-alicey gitolite-as-boben lugar del nombre de host en tu 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 yespara evitar el uso de identificadores predeterminados. De lo contrario, si también tiene archivos de identificación que coinciden con los nombres predeterminados, se probarán primero porque, a diferencia de otras opciones de configuración (que cumplen con "primero en ganar"), la IdentityFileopción se agrega a la lista de identidades para probar. Consulte: https://serverfault.com/questions/450796/how-could-i-stop-ssh-offering-a-wrong-key/450807#450807

Mark Longair avatar Oct 28 '2011 10:10 Mark Longair

Configure su repositorio usandogit config

git config --add --local core.sshCommand 'ssh -i <<<PATH_TO_SSH_KEY>>>'

Esto se aplica únicamente a su repositorio local .

episage avatar Jun 09 '2020 08:06 episage

Puede utilizar la variable de entorno git GIT_SSH_COMMAND. Ejecute esto en su terminal en su repositorio git:

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

Reemplace ~/.ssh/your_private_keycon la ruta de la clave privada ssh que desea usar. Y puede cambiar el comando git posterior (en el ejemplo es git submodule update --init) por otros como git pull, git fetchetc.

Hustlion avatar May 13 '2017 12:05 Hustlion

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 de git.

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

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

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

git admin push 

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

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

Paso 2: cree un script llamado "ssh-as.sh" que ejecute cosas que usen SSH, pero use una clave SSH determinada 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 comandos git usando la clave SSH proporcionada.

#!/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/

sinelaw avatar Jan 24 '2013 03:01 sinelaw