Come specificare la chiave SSH privata da usare quando si eseguono comandi di shell su Git?

Una situazione piuttosto insolita forse, ma voglio specificare una chiave SSH privata da usare quando si esegue un comando di shell (git) dal computer locale.

Fondamentalmente come questo:

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

O ancora meglio (in Ruby):

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

Ho visto esempi di connessione a un server remoto con Net::SSH che usa una chiave privata specificata, ma questo è un comando locale. È possibile?

Soluzione

Qualcosa del genere dovrebbe funzionare (suggerito da orip):

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

se preferite i subshell, potreste provare il seguente (anche se è più fragile):

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

Git invocherà SSH che troverà il suo agente per variabile d'ambiente; questo, a sua volta, avrà la chiave caricata.

In alternativa, l'impostazione di HOME può anche fare il trucco, purché si sia disposti a impostare una directory che contenga solo una directory .ssh come HOME; questa può contenere un identity.pub, o un file di configurazione che imposta IdentityFile.

Commentari (17)

Contenuto di my_git_ssh_wrapper:

#!/bin/bash

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

Poi si può usare la chiave facendo:

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

Potresti usare la variabile d'ambiente GIT_SSH. Ma dovrai avvolgere ssh e le opzioni in uno script di shell.

Vedi il manuale di git: man git nella tua shell di comando.

Commentari (0)