Como especificar a chave privada SSH para usar ao executar o comando shell no Git?

Uma situação bastante incomum talvez, mas eu quero especificar uma chave SSH privada para usar ao executar um comando shell (git) a partir do computador local.

Basicamente, assim:

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

Ou ainda melhor (em Ruby):

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

Eu vi exemplos de conexão a um servidor remoto com Net::SSH que usa uma chave privada especificada, mas este é um comando local. Isso é possível?

Solução

Algo como isto deve funcionar (sugerido pela orip):

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

se preferir as subcasas, você poderia tentar o seguinte (embora seja mais frágil):

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

Git invocará SSH que encontrará seu agente por variável de ambiente; esta, por sua vez, terá a chave carregada.

Alternativamente, configurar HOME também pode fazer o truque, desde que você esteja disposto a configurar um diretório que contenha apenas um diretório .ssh como HOME; este pode conter um identity.pub, ou um arquivo de configuração configurando o IdentityFile.

Comentários (17)

Conteúdo do meu_git_ssh_wrapper:

#!/bin/bash

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

Então você pode usar a chave fazendo:

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

Você poderia usar a variável de ambiente GIT_SSH. Mas você terá de embrulhar ssh e opções em um script shell.

Veja o manual do git: "Git" na tua concha de comando.

Comentários (0)