¿Cómo especificar la clave SSH privada que se utilizará al ejecutar el comando shell en Git?

Una situación bastante inusual tal vez, pero quiero especificar una clave SSH privada para utilizar cuando se ejecuta un comando shell (git) desde el equipo local.

Básicamente como esto:

git clone git@github.com:TheUser/TheProject.git -key "/home/christoffer/ssh_keys/theuser"

O incluso mejor (en Ruby):

with_key("/home/christoffer/ssh_keys/theuser") do
  sh("git clone git@github.com:TheUser/TheProject.git")
end

He visto ejemplos de conexión a un servidor remoto con Net::SSH que utiliza una clave privada especificada, pero este es un comando local. ¿Es posible?

Solución

Algo como esto debería funcionar (sugerido por orip):

ssh-agent bash -c 'ssh-add /somewhere/yourkey; git clone git@github.com:user/project.git'

si prefieres subshells, podrías probar lo siguiente (aunque es más frágil):

ssh-agent $(ssh-add /somewhere/yourkey; git clone git@github.com:user/project.git)

Git invocará a SSH que encontrará su agente por variable de entorno; éste, a su vez, tendrá cargada la clave.

Alternativamente, el establecimiento de HOME también puede hacer el truco, siempre y cuando usted está dispuesto a configurar un directorio que contiene sólo un directorio .ssh como HOME; esto puede contener un identity.pub, o un archivo de configuración ajuste IdentityFile.

Comentarios (17)

Contenido de my_git_ssh_wrapper:

#!/bin/bash

ssh -i /path/to/ssh/secret/key $1 $2

A continuación, puede utilizar la clave haciendo:

GIT_SSH=my_git_ssh_wrapper git clone git@github.com:TheUser/TheProject.git
Comentarios (5)

Puedes utilizar la variable de entorno GIT_SSH. Pero tendrá que envolver ssh y opciones en un script de shell.

Consulte el manual de git: man git en su shell de comandos.

Comentarios (0)