J'ai un compte personnel et un compte d'entreprise sur Unfuddle. Sur la confusion Les clés SSH ne peuvent être utilisées que sur 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 la société est {company} _rsa). Le problème maintenant, c’est qu’il semble que ma clé par défaut soit utilisée partout et que je ne sois pas en mesure de spécifier une clé à utiliser dans Git pour des pensions individuelles.
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 dépôt Git pour un dépôt sur le compte de désorganisation de ma société se présente comme suit:
[remote "Origin"]
url = git@{companyaccount}.unfuddle.com:{companyaccount}/overall.git
fetch = +refs/heads/*:refs/remotes/Origin/*
Donc je ne suis pas sûr s'il y a quelque chose qui ne va pas avec ma config ssh ou ma config git.
Si vous avez un ssh-agent actif avec votre clé id_rsa
chargée, le problème est probablement que ssh offre cette clé en premier. Unfuddle l'accepte probablement pour l'authentification (par exemple, dans sshd ), mais le refuse pour l'autorisation d'accéder aux référentiels de la société (par exemple, dans le logiciel interne utilisé pour l'autorisation, qui s'apparente peut-être à Gitolite). Il existe peut-être un moyen d’ajouter votre clé personnelle au compte de la société (plusieurs personnes ne partagent pas les mêmes fichiers corp_rsa
de clés publique et privée, n’est-ce pas?).
Le mot clé de configuration IdentitiesOnly
.ssh/config
peut être utilisé pour limiter les clés que ssh offre à la télécommande sshd à celles spécifiées via les mots clés IdentityFile
(c’est-à-dire qu’il refusera d’utiliser les clés supplémentaires chargées d’être chargées. un actif ssh-agent ).
Essayez ces sections .ssh/config
:
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 souhaitez tirer pleinement parti du mécanisme .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 les URL Git comme celles-ci:
uf-mine:{personalaccount}/my-stuff.git
uf-comp:{companyaccount}/their-stuff.git
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 utilisez personal_repo
en tant qu'hôte dans votre dépôt Git.
IdentityFile et IdentitiesOnly fonctionnent bien. Ce qui me dérange, c’est que je dois penser à utiliser différents noms d’hôte pour la connexion et au fait que la connexion de l’agent transféré conserve toutes les clés, ce qui signifie que si l’hôte distant est compromis, ils peuvent utiliser n’importe laquelle de mes identités pendant que je suis en poste. .
J'ai récemment commencé à utiliser:
https://github.com/ccontavalli/ssh-ident
c'est un wrapper autour de ssh, ça:
Voici une manière 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-agent -L | grep personal > ~/.ssh/personal_identity.pub
ssh-agent -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, de sorte que ssh est obligé d'utiliser ssh-agent. Cela est également utile si vous n’avez pas accès aux clés privées (par exemple, le transfert d’agent ssh)