2014-05-20 2 views
4

Je suis sûr que nous obtenons cette erreur de temps en temps:Comment gérer les clés ssh multiples dans le répertoire ~/.ssh

$ git push origin master 
Permission denied (publickey). 
fatal: Could not read from remote repository. 

Please make sure you have the correct access rights 
and the repository exists. 

Le remède typique est de créer simplement une paire de clés publique/privée et le partage avec votre hôte git (dans mon cas bitbucket, avec leur instructions)

La chose est cependant, j'ai beaucoup de comptes qui exigent que j'ai une paire de clés publique/privée (par exemple je dois enregistrer une clé pour se connecter à AWS .. etc) .. donc ce que je fais est que je crée ces clés et les enregistrer dans des répertoires séparés, par exemple

~/.ssh $ find . 
./awskeys 
./awskeys/id_rsa 
./awskeys/id_rsa.pub 
./bitbucket 
./bitbucket/id_rsa 
./bitbucket/id_rsa.pub 

mais alors cette erreur apparaît de temps en temps .. pour la résoudre, je dois déplacer les clés pertinentes à la racine ~/.ssh. cela ne me semble pas juste. Comment puis-je le faire de manière fiable?

+0

Vous pouvez simplement utiliser la même paire de clés pour tous ces services (à condition qu'aucun d'entre eux ne connaisse votre clé privée). – Thilo

+1

J'ai plusieurs clés dans mon dossier .ssh, quand je pousse des commits git, il demande lequel doit être utilisé. Donnez-leur simplement des noms différents. – Havenard

+0

@Havenard bien qui est incommode – abbood

Répondre

4

Vous pouvez les partout où vous voulez, mais leur permission et l'autorisation des dossiers parents doivent être stricte:

  • pas d'accès en écriture pour le dossier parent (pour les autres et tous)
  • 644 pour une clé publique
  • 600 pour une clé privée.

Vous pouvez alors:

  • déclarent les différentes clés dans un ~/.ssh/config file (example here)
  • modifier l'URL à distance afin d'utiliser l'entrée appropriée du fichier ~/.ssh/config qui décrit la clé ssh droit utilisation.

Cela signifie une entrée comme:

Host mygithub 
    User   git 
    IdentityFile ~/.ssh/mypath/mykey # wherever your "new" key lives 
    IdentitiesOnly yes 

vous permet de remplacer une url comme [email protected]: nom d'utilisateur/repo avec:

git remote set-url origin mygithub:username/repo 
+0

mmm intéressant .. je dois regarder dans ce – abbood

+0

@abbood J'ai ajouté un exemple. – VonC

+2

@abbood this * really * est la façon * standard * de gérer plusieurs clés ssh. – VonC