101 votes

Utilisation de plusieurs clés publiques SSH

J'ai un compte personnel et un compte d'entreprise sur Unfuddle. Sur Unfuddle, les clés SSH ne peuvent être utilisées que pour un seul compte, je dois donc créer une clé SSH distincte sur mon ordinateur portable pour les deux comptes. J'ai exécuté ssh-keygen -t rsa pour générer deux clés avec des noms différents (personal est le nom par défaut et company est {company}_rsa). Le problème maintenant est qu'il semble que ma clé par défaut est utilisée partout et je ne trouve pas comment spécifier une clé à utiliser dans Git pour les dépôts individuels.

Ma question est donc la suivante : comment puis-je spécifier une clé SSH à utiliser sur une base repo à repo ?

J'ai configuré mon ssh_config (~/.ssh/config) mais cela ne semble toujours pas fonctionner.

config :

Host {personalaccount}.unfuddle.com
     HostName {personalaccount}.unfuddle.com
     User git
     IdentityFile /Users/dave/.ssh/id_rsa

Host {companyaccount}.unfuddle.com
     HostName {companyaccount}.unfuddle.com
     User git
     IdentityFile /Users/dave/.ssh/cage_rsa

Mon fichier de configuration de repo Git pour un repo sur le compte unfuddle de mon entreprise ressemble à ceci :

[remote "origin"]
     url = git@{companyaccount}.unfuddle.com:{companyaccount}/overall.git
     fetch = +refs/heads/*:refs/remotes/origin/*

Je ne suis donc pas sûr qu'il y ait un problème avec ma configuration ssh ou ma configuration git.

110voto

Chris Johnsen Points 36743

Si vous avez un ssh-agent qui a votre id_rsa chargé, alors le problème est probablement que ssh offre cette clé en premier. Unfuddle l'accepte probablement pour l'authentification (par exemple dans sshd ) mais la rejette pour l'autorisation d'accès aux référentiels de l'entreprise (par exemple, dans le logiciel interne qu'ils utilisent pour l'autorisation, peut-être quelque chose de semblable à Gitolite). Il existe peut-être un moyen d'ajouter votre clé personnelle au compte de l'entreprise (plusieurs personnes ne partagent pas la même clé). corp_rsa les fichiers de clés publiques et privées, n'est-ce pas ?).


El IdentitiesOnly .ssh/config Le mot-clé de configuration peut être utilisé pour limiter les clés que les ssh offre à la télécommande sshd à ceux spécifiés via IdentityFile (c'est-à-dire qu'il refusera d'utiliser toute clé supplémentaire qui se trouve chargée dans un fichier actif de l'UE). ssh-agent ).

Essayez-les. .ssh/config sections :

Host {personalaccount}.unfuddle.com
     IdentityFile ~/.ssh/id_rsa
     IdentitiesOnly yes

Host {companyaccount}.unfuddle.com
     IdentityFile ~/.ssh/{companyaccount}_rsa
     IdentitiesOnly yes

Ensuite, utilisez des URL de Git comme celles-ci :

git@{personalaccount}.unfuddle.com:{personalaccount}/my-stuff.git
git@{companyaccount}.unfuddle.com:{companyaccount}/their-stuff.git

Si vous voulez profiter pleinement de la .ssh/config vous pouvez fournir votre propre nom d'hôte personnalisé et modifier le nom d'utilisateur par défaut :

Host uf-mine
     HostName {personalaccount}.unfuddle.com
     User git
     IdentityFile ~/.ssh/id_rsa
     IdentitiesOnly yes

Host uf-comp
     HostName {companyaccount}.unfuddle.com
     User git
     IdentityFile ~/.ssh/{companyaccount}_rsa
     IdentitiesOnly yes

Ensuite, utilisez des URL de Git comme celles-ci :

uf-mine:{personalaccount}/my-stuff.git
uf-comp:{companyaccount}/their-stuff.git

4voto

MarkMo Points 125

IdentityFile et IdentitiesOnly fonctionnent bien. Ce qui me dérange, c'est de devoir me souvenir d'utiliser différents noms d'hôtes pour me connecter, et le fait que la connexion de l'agent transféré détient toujours toutes les clés, ce qui signifie que si l'hôte distant est compromis, il peut utiliser n'importe laquelle de mes identités pendant que je suis dedans.

J'ai récemment commencé à l'utiliser :

https://github.com/ccontavalli/ssh-ident

C'est une enveloppe autour de ssh, c'est.. :

  • conserve un agent entièrement distinct pour chaque identité que vous définissez.
  • partage automatiquement les agents entre les sessions de connexion, rien à faire dans votre .bashrc.
  • charge l'agent et les clés correspondantes sur demande dès que vous en avez besoin.
  • détermine l'agent à utiliser en fonction de la ligne de commande ssh (nom d'hôte et autres) ou de votre répertoire de travail actuel. C'est particulièrement pratique car j'ai tendance à travailler à partir de différents chemins en fonction de ce que je fais.

2voto

Reactormonk Points 187

man ssh_config

Quelque chose comme

Host personal_repo
  User personal
  IdentityFile .ssh/personal_rsa

Host company_repo
  User company
  IdentityFile .ssh/company_rsa

Et utiliser personal_repo comme hôte dans votre dépôt git.

2voto

Vanuan Points 169

Voici une méthode appropriée si vous voulez utiliser l'agent ssh :

# Create public keys to make sure they exist
# this is a must if you use ssh agent forwarding
# or want to use ssh-agent at all
ssh-add -L | grep personal > ~/.ssh/personal_identity.pub
ssh-add -L | grep company > ~/.ssh/company_identity.pub

# Add to ~/.ssh/config
Host {personalaccount}.unfuddle.com
  IdentityFile ~/.ssh/personal_identity.pub

Host {companyaccount}.unfuddle.com
  IdentityFile ~/.ssh/company_identity.pub

Explication : si vous avez une clé privée dans votre répertoire ~/.ssh, ssh-agent ne sera pas utilisé. Nous créons donc une clé publique sous un autre nom, afin que ssh soit obligé d'utiliser ssh-agent. Ceci est également utile si vous n'avez pas accès aux clés privées (par exemple, le transfert d'agent ssh).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X