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).
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/