Comment spécifier la clé SSH privée à utiliser lors de l'exécution d'une commande shell sur Git ?

Une situation plutôt inhabituelle peut-être, mais je veux spécifier une clé SSH privée à utiliser lors de l'exécution d'une commande shell (git) depuis l'ordinateur local.

En gros, c'est comme ça :

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

Ou encore mieux (en Ruby) :

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

J'ai vu des exemples de connexion à un serveur distant avec Net::SSH qui utilise une clé privée spécifiée, mais ceci est une commande locale. Est-ce possible ?

Solution

Quelque chose comme ceci devrait fonctionner (suggéré par orip) :

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

si vous préférez les subshells, vous pouvez essayer ce qui suit (bien que ce soit plus fragile) :

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

Git invoquera SSH qui trouvera son agent par variable d'environnement ; celui-ci aura, à son tour, la clé chargée.

Alternativement, définir HOME peut aussi faire l'affaire, à condition que vous soyez prêt à configurer un répertoire qui ne contient qu'un répertoire .ssh en tant que HOME ; celui-ci peut contenir soit un identity.pub, soit un [fichier de configuration][1] définissant IdentityFile.

[1] : http://linux.die.net/man/5/ssh_config

Commentaires (17)

Contenu de mon_git_ssh_wrapper :

#!/bin/bash

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

Ensuite, vous pouvez utiliser la clé en faisant :

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

Vous pouvez utiliser la variable d'environnement GIT_SSH. Mais vous devrez intégrer ssh et les options dans un script shell.

Voir le manuel git : man git dans votre shell de commande.

Commentaires (0)