Question 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 sur un seul compte. Je dois donc créer une clé SSH séparée sur mon ordinateur portable pour les deux comptes. Iran 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 soit utilisée partout et je ne peux pas savoir comment spécifier une clé à utiliser dans Git pour les mises en pension individuelles.

Donc, ma question est la suivante: comment 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 mon compte d'entreprise flou ressemble à ceci:

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

Donc, je ne suis pas sûr si quelque chose ne va pas avec ma configuration ssh ou ma config git.


93
2018-04-18 13:26


origine


Votre configuration SSH semble correcte, j'utilise une configuration similaire. - Paŭlo Ebermann


Réponses:


Si vous avez un actif ssh-agent ça a ton id_rsa clé chargée, le problème est probablement que ssh offre d'abord cette clé. Unfuddle l'accepte probablement pour l'authentification (par exemple dans sshd) mais la rejette pour pouvoir accéder aux référentiels de la société (par exemple, dans les logiciels internes qu’ils utilisent pour obtenir une autorisation, éventuellement quelque chose qui ressemble à Gitolite). Peut-être y a-t-il un moyen d'ajouter votre clé personnelle au compte de l'entreprise (plusieurs personnes ne partagent pas la même corp_rsa fichiers de clé publique et privée, sont-ils?).


le IdentitiesOnly  .ssh/config Le mot-clé de configuration peut être utilisé pour limiter les clés ssh offre à la télécommande sshd à ceux spécifiés via IdentityFile mots clés (c’est-à-dire qu’il refusera d’utiliser des clés supplémentaires chargées dans un ssh-agent).

Essayez ces .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 les URL 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 mécanisme, 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 les URL Git comme celles-ci:

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

105
2018-04-19 03:21



Si vous avez plusieurs comptes sur le même sous-domaine Unfuddle (avec des clés SSH différentes), vous devrez utiliser la deuxième méthode. - leolobato
IdentitiesOnly était essentiel pour moi dans ma configuration gitolite, merci! - Koen.
Génial, cela corrige le problème que toutes mes clés sont envoyées à github. Cependant, sous OS X, je dois toujours saisir ma phrase secrète. Y a-t-il un moyen de dire seulement utiliser la clé spécifiée dans config mais continuer à utiliser l'agent ssh? - Drew
@Drew: Si la clé est déjà chargée dans l'agent, la commande doit toujours la tirer de l'agent. Êtes-vous sûr que votre clé est pré-chargée? Vérifier avec ssh-add -l avant d’utiliser votre alias d’hôte Git. Le fichier de clé publique doit également être présent pour que ssh peut reconnaître la clé qui ssh-agent est en train de stocker Vous pouvez régénérer un perdu .pub fichier avec une commande comme ssh-keygen -f blah -y > blah.pub. - Chris Johnsen
Oui, c'est là-bas. Lorsque j'ai supprimé l'appel IdentitiesOnly, il envoie à github 4 clés différentes (y compris une clé sans demander la phrase secrète). Lorsque j'ajoute l'appel, il envoie uniquement la clé mais demande la phrase secrète à chaque fois. Même lorsque je demande à OSX de stocker la valeur de la phrase secrète dans son trousseau. - Drew


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 utilise personal_repo en tant qu'hôte dans votre dépôt git.


3
2018-04-18 14:05



Tass, pourriez-vous revoir mes modifications apportées ci-dessus? J'ai ajouté mon ssh_config et ma config git.
Host est juste un identifiant - pas besoin de nom de domaine complet. Cela crée probablement des bogues cachés. Si vous changez cela, vous n'avez pas besoin d'épeler le nom complet dans votre git config.
pour gitorious, user = git et host gitorious.org: par ex. git@gitorious.org: ~ revelut / qt / bruce-sandbox-qt.git Comment associer une partie de l'URL à votre hôte? (typiquement ~ revelut pour moi)
@Tass donc si je donne le nom company_unfuddle à la configuration SSH si mon URL est git @ company_unfuddle: {company} /overall.git? @Bruce - Je ne suis pas sûr de ce que vous demandez. Pourriez-vous développer un peu plus?


IdentityFile et IdentitiesOnly fonctionnent bien. Ce qui me dérange, c’est de devoir utiliser différents noms d’hôte pour se connecter, et le fait que la connexion de l’agent transféré contient toujours toutes les clés, ce qui signifie que si l’hôte distant est compromis, .

J'ai récemment commencé à utiliser:

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

c'est un wrapper autour de ssh, il:

  • 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 fichier .bashrc.
  • charge l'agent et les clés correspondantes à la demande la première fois que vous en avez besoin.
  • détermine l'agent à utiliser en fonction de la ligne de commande ssh (nom d'hôte & tel) ou de votre répertoire de travail actuel. Ceci est particulièrement pratique car j'ai tendance à travailler à partir de différents chemins en fonction de ce que je fais.

3
2018-03-15 04:20