1184 votes

Meilleure façon d'utiliser plusieurs clés privées SSH sur un même client

Je veux utiliser plusieurs clés privées pour me connecter à différents serveurs ou à différentes parties du même serveur (mes utilisations sont l'administration système du serveur, l'administration de Git et l'utilisation normale de Git au sein du même serveur). J'ai essayé de simplement empiler les clés dans le répertoire id_rsa en vain.

Apparemment, un moyen simple de le faire est d'utiliser la commande

ssh -i <key location> login@server.example.com 

C'est assez encombrant.

Avez-vous des suggestions sur la façon de procéder pour faciliter les choses ?

8 votes

J'ai écrit cet article qui traite en profondeur des différentes configurations et de leurs avantages et inconvénients.

108voto

Sajib Khan Points 11151
  1. Générer une clé SSH :

     $ ssh-keygen -t rsa -C <email1@example.com>
  2. Générer une autre clé SSH :

     $ ssh-keygen -t rsa -f ~/.ssh/accountB -C <email2@example.com>

    Maintenant, deux clés publiques ( id_rsa.pub , compteB.pub ) devrait exister dans le ~/.ssh/ répertoire.

     $ ls -l ~/.ssh     # see the files of '~/.ssh/' directory
  3. Créer un fichier de configuration ~/.ssh/config avec le contenu suivant :

     $ nano ~/.ssh/config
    
     Host bitbucket.org
         User git
         Hostname bitbucket.org
         PreferredAuthentications publickey
         IdentityFile ~/.ssh/id_rsa
    
     Host bitbucket-accountB
         User git
         Hostname bitbucket.org
         PreferredAuthentications publickey
         IdentitiesOnly yes
         IdentityFile ~/.ssh/accountB
  4. Clone de default compte.

     $ git clone git@bitbucket.org:username/project.git
  5. Clone du accountB compte.

     $ git clone git@bitbucket-accountB:username/project.git

Remarque : En raison de la User git vous pouvez omettre la directive git@ de l'URL du dépôt, ce qui raccourcit votre clone comme suit :

    $ git clone bitbucket-accountB:username/project.git

C'est le seul but de cette directive. Si vous n'en avez pas besoin (par exemple, si vous copiez-collez toujours la commande git clone du site web), vous pouvez la laisser en dehors de la configuration.

Voir plus ici

29voto

Wahib Haq Points 390

Je suis d'accord avec Tuomas pour utiliser ssh-agent. Je voulais également ajouter une deuxième clé privée pour le travail et ce tutoriel a fonctionné comme un charme pour moi.

Les étapes sont les suivantes :

  1. $ ssh-agent bash
  2. $ ssh-add /path.to/private/key Par exemple ssh-add ~/.ssh/id_rsa
  3. Vérifier par $ ssh-add -l
  4. Testez-le avec $ssh -v <host url> Par exemple ssh -v git@assembla.com

27voto

amdev Points 128

Pour moi, la seule solution qui fonctionne était d'ajouter simplement ceci dans le fichier ~/.ssh/config :

Host *
  IdentityFile ~/.ssh/your_ssh_key
  IdentityFile ~/.ssh/your_ssh_key2
  IdentityFile ~/.ssh/your_ssh_key3
  AddKeysToAgent yes

your_ssh_key est sans aucune extension. N'utilisez pas .pub .

24voto

Naga Kiran Points 2985

Maintenant, avec la version récente de Git, on peut spécifier sshCommand dans le fichier de configuration Git spécifique au dépôt :

  [core]
      repositoryformatversion = 0
      filemode = true
      bare = false
      logallrefupdates = true
      sshCommand = ssh -i ~/.ssh/id_rsa_user
   [remote "origin"]
      url = git@bitbucket.org:user/repo.git
      fetch = +refs/heads/*:refs/remotes/origin/*

17voto

Ananth Pai Points 1004

J'ai rencontré ce problème il y a quelque temps, lorsque j'avais deux comptes Bitbucket et que je voulais stocker des clés SSH distinctes pour les deux. Voici ce qui a fonctionné pour moi.

J'ai créé deux configurations ssh distinctes comme suit.

Host personal.bitbucket.org
    HostName bitbucket.org
    User git
    IdentityFile /Users/username/.ssh/personal
Host work.bitbucket.org
    HostName bitbucket.org
    User git
    IdentityFile /Users/username/.ssh/work

Maintenant, lorsque j'ai dû cloner un dépôt à partir de mon compte de travail - la commande était la suivante.

git clone git@bitbucket.org:teamname/project.git

J'ai dû modifier cette commande pour :

git clone git@**work**.bitbucket.org:teamname/project.git

De même, la commande clone de mon compte personnel a dû être modifiée en

git clone git@ personnel .bitbucket.org:nom/personalproject.git

Consultez le site ce lien pour plus d'informations.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X