Meilleure façon d'utiliser plusieurs clés privées SSH sur un 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 git normale au sein du même serveur). J'ai essayé de simplement empiler les clés dans les fichiers id_rsa en vain.

apparemment une façon simple de faire ceci est d'utiliser la commande

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

c'est assez encombrant.

des suggestions sur la façon de faire cela un peu plus facile?

694
demandé sur Peter Mortensen 2010-03-10 21:40:58

13 réponses

de mon .ssh/config :

Host myshortname realname.example.com
    HostName realname.example.com
    IdentityFile ~/.ssh/realname_rsa # private key for realname
    User remoteusername

Host myother realname2.example.org
    HostName realname2.example.org
    IdentityFile ~/.ssh/realname2_rsa
    User remoteusername

et ainsi de suite.

995
répondu Randal Schwartz 2015-07-22 10:59:39

Le réponse de Randal Schwartz presque m'a aidé tout le chemin. J'ai un nom d'utilisateur différent sur le serveur, donc j'ai dû ajouter le User mot-clé à mon fichier:

Host           friendly-name
HostName       long.and.cumbersome.server.name
IdentityFile   ~/.ssh/private_ssh_file
User           username-on-remote-machine

maintenant vous pouvez vous connecter en utilisant le nom Amical:

ssh friendly-name

plus de mots clés peuvent être trouvés sur le la page de manuel D'OpenSSH . NOTE: certains des mots clés énumérés peuvent déjà soyez présent dans votre fichier /etc/ssh/ssh_config .

232
répondu peron 2017-05-23 12:26:35

vous pouvez demander à ssh d'essayer plusieurs touches successives lors de la connexion. Voici comment:

$ cat ~/.ssh/config
IdentityFile ~/.ssh/id_rsa
IdentityFile ~/.ssh/id_rsa_old
IdentityFile ~/.ssh/id_ed25519
# ... and so on

$ ssh server.example.com -v
....
debug1: Next authentication method: publickey
debug1: Trying private key: /home/example/.ssh/id_rsa
debug1: read PEM private key done: type RSA
debug1: Authentications that can continue: publickey
debug1: Trying private key: /home/example/.ssh/id_rsa_old
debug1: read PEM private key done: type RSA
....
[server ~]$

de cette façon, vous n'avez pas à spécifier quelle clé fonctionne avec quel serveur. Il vous suffit d'utiliser la clé.

vous n'entrerez une phrase de passe que si un serveur donné accepte la clé. Comme vu ci-dessus ssh n'a pas essayé de demander un mot de passe pour .ssh/id_rsa même si elle avait un.

sûrement pas outbeat une configuration par serveur comme dans les autres réponses, mais au moins vous n'aurez pas à ajouter une configuration pour tous les serveurs auxquels vous vous connectez!

188
répondu spacesix 2017-10-18 19:42:20
foo:~$ssh-add ~/.ssh/xxx_id_rsa

assurez-vous de le tester avant de l'ajouter avec:

ssh -i ~/.ssh/xxx_id_rsa username@example.com

si vous avez des problèmes avec les erreurs parfois changer la sécurité du fichier AIDE:

chmod 0600 ~/.ssh/xxx_id_rsa
91
répondu user420807 2017-10-18 19:40:25

les réponses précédentes ont correctement expliqué la façon de créer un fichier de configuration pour gérer plusieurs clés SSH. Je pense que la chose importante qui doit aussi être expliquée est le remplacement d'un nom d'hôte par un nom d'alias pendant le clonage du dépôt .

supposons que votre nom d'utilisateur du compte Github de la société est abc1234 . Et supposons que le nom d'utilisateur de votre compte github personnel est jack1234

et, supposons que vous ayez créé deux clés RSA, à savoir id_rsa_company et id_rsa_personal . Ainsi, votre fichier de configuration ressemblera à celui ci-dessous:

# Company account
Host company
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_company

# Personal account
Host personal
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_personal

Maintenant, lorsque vous clonez le dépôt (nom de la démo) à partir du compte GitHub de la société, L'URL du dépôt sera quelque chose comme:

Repo URL: git@github.com:abc1234/demo.git

maintenant, en faisant git clone , vous devriez modifier L'URL du dépôt ci-dessus comme:

git@company:abc1234/demo.git

Remarquez comment github.com est désormais remplacé par l'alias "société" comme nous l'avons défini dans le fichier de configuration.

de même, vous devez modifier l'URL du clone du dépôt dans le compte personnel en fonction de l'alias fourni dans le fichier de configuration.

49
répondu oblivion 2017-10-18 19:52:07

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

les Étapes sont comme ci-dessous:

  1. $ ssh-agent bash
  2. $ ssh-add /path.to/private/key E. g ssh-add ~/.ssh/id_rsa
  3. vérifier par $ ssh-add -l
  4. tester avec $ssh -v <host url> E. g ssh -v git@assembla.com
22
répondu Wahib Ul Haq 2017-10-18 19:41:15
  1. Générer la clé SSH:

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

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

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

    $ ls -l ~/.ssh     # see the files of '~/.ssh/' directory 
    
  3. Créer 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 du compte default .

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

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

Voir Plus Ici

15
répondu Sajib Khan 2017-10-09 11:03:08

utilisez ssh-agent pour vos clés.

10
répondu Tuomas Pelkonen 2010-03-10 18:44:02

j'avais rencontré ce problème il y a quelque temps, quand j'avais deux comptes Bitbucket et que je voulais stocker des clés SSH séparées pour les deux. C'est 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 quand 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:

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@ personal .bitbucket.org: nom / personalproject.git

Consultez ce lien pour plus d'informations.

8
répondu Ananth Pai 2017-10-18 19:53:57

maintenant, avec la version récente de git, nous pouvons 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/*
2
répondu Naga Kiran 2018-08-19 14:29:18

IMPORTANT: vous devez commencer ssh-agent

vous devez démarrer ssh-agent (s'il n'est pas déjà en cours d'exécution) avant d'utiliser ssh-add comme suit:

eval `ssh-agent -s` # start the agent

ssh-add id_rsa_2 # where id_rsa_2 is your new private key file

notez que la commande eval démarre l'agent sur Git bash sur windows. D'autres environnements peuvent utiliser une variante pour démarrer l'agent ssh.

1
répondu danday74 2017-07-27 10:31:26

vous pouvez créer un fichier de configuration nommé config dans votre dossier ~/.ssh . Il peut contenir:

Host aws
    HostName *yourip*
    User *youruser*
    IdentityFile *idFile*

cela vous permettra de vous connecter à des machines comme celle-ci""

 ssh aws
1
répondu Andrew Crowley 2017-10-18 19:43:40

on Centos 6.5 running OpenSSH_5.3P1, OpenSSL 1.0.1 e-fips, j'ai résolu le problème en renommant mes fichiers clés pour qu'aucun d'eux n'ait le nom par défaut. Mon. le répertoire ssh contient id_rsa_foo et id_rsa_bar mais pas id_rsa, etc.

0
répondu Chris Owens 2017-03-16 21:07:23