Question Spécifiez la clé SSH privée à utiliser lors de l'exécution de la commande shell?


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) à partir de l'ordinateur local.

Fondamentalement comme ceci:

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

Ou même 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 c'est une commande locale. C'est possible?


706
2017-12-30 19:42


origine


Réponses:


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 sous-couches, 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; cela aura, à son tour, la clé chargée.

Alternativement, réglage HOME peut également faire l'affaire, à condition que vous êtes prêt à configurer un répertoire qui contient seulement un .ssh répertoire comme HOME; ceci peut contenir un identity.pub, ou un fichier de configuration définition IdentityFile.


523
2017-12-30 19:48



Aucune de ces solutions n'a fonctionné pour moi.

Au lieu de cela, j'élabore sur @Martin v. Löwis mention de la mise en place d'un config fichier pour SSH.

SSH recherchera l'utilisateur ~/.ssh/config fichier. J'ai la configuration de la mine comme:

Host gitserv
    Hostname remote.server.com
    IdentityFile ~/.ssh/id_rsa.github
    IdentitiesOnly yes # see NOTES below

Et j'ajoute un dépôt git distant:

git remote add origin git@gitserv:myrepo.git

Et puis les commandes git fonctionnent normalement pour moi.

git push -v origin master

REMARQUES

  • le IdentitiesOnly yes est nécessaire pour empêcher le comportement par défaut de SSH d'envoyer le fichier d'identité correspondant au nom de fichier par défaut pour chaque protocole. Si vous avez un fichier nommé ~/.ssh/id_rsa qui va essayer AVANT votre ~/.ssh/id_rsa.github sans cette option.

Les références


869
2018-06-28 19:44



Les suggestions des autres à propos de ~/.ssh/config sont plus compliqués. Cela peut être aussi simple que:

Host github.com
  IdentityFile ~/.ssh/github_rsa

348
2017-09-17 00:39



A partir de Git 2.3.0, nous avons aussi la commande simple (pas de fichier de configuration nécessaire):

GIT_SSH_COMMAND='ssh -i private_key_file' git clone user@host:repo.git

224
2018-04-20 17:03



Contenu de my_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

121
2018-02-17 01:32



Pour résumer les réponses et commentaires, la meilleure façon de configurer git pour utiliser différents fichiers clés, puis de l'oublier, qui prend également en charge différents utilisateurs pour le même hôte (par exemple, un compte GitHub personnel et un travail), qui fonctionne également sous Windows, est d'éditer ~/.ssh/config (ou c:\Users\<your user>\.ssh\config) et spécifiez plusieurs identités:

Host github.com
HostName github.com
IdentityFile /path/to/your/personal/github/private/key
User dandv

Host github-work
HostName github.com
IdentityFile /path/to/your/work/github/private/key
User workuser

Ensuite, pour cloner un projet en tant qu'utilisateur personnel, lancez git clone commander.

Pour cloner le repo en tant que workuser, courir git clone git@github-work:company/project.git.


70
2017-09-19 00:19



Avec git 2.10+ (Q3 2016: publié le 2 septembre 2016), vous avez la possibilité de définir un config pour GIT_SSH_COMMAND (et pas seulement une variable d'environnement comme décrit dans Rober Jack Willde répondre)

Voir commettre 3c8ede3 (26 juin 2016) par Nguyễn Thái Ngọc Duy (pclouds).
(Fusionné par Junio ​​C Hamano - gitster - dans commenter dc2116419 juillet 2016)

Une nouvelle variable de configuration core.sshCommand a été ajouté à   spécifiez la valeur que GIT_SSH_COMMAND doit utiliser par référentiel.

core.sshCommand:

Si cette variable est définie, git fetch et git push utilisera la commande spécifiée au lieu de ssh quand ils ont besoin de se connecter à un système distant.
  La commande est dans la même forme que la GIT_SSH_COMMAND variable d'environnement et est substituée lorsque la variable d'environnement est définie.

Cela signifie que git clone peut être:

cd /path/to/my/repo
git config core.sshCommand 'ssh -i private_key_file' 
# later on
git clone host:repo.git

46
2017-07-20 06:47



Comme indiqué ici: https://superuser.com/a/912281/607049

Vous pouvez le configurer par repo:

git config core.sshCommand "ssh -i ~/.ssh/id_rsa_example -F /dev/null"
git pull
git push

38
2018-01-12 12:14



Way meilleure idée d'ajouter cet hôte ou ip à la .ssh/config fichier comme ça:

Host (a space separated list of made up aliases you want to use for the host)
    User git
    Hostname (ip or hostname of git server)
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_(the key you want for this repo)

28
2017-10-01 21:55