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.

1610voto

Randal Schwartz Points 9756

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  # different private key for realname2
    User remoteusername

Ensuite, vous pouvez utiliser les éléments suivants pour vous connecter :

ssh myshortname

ssh myother

Et ainsi de suite.

30 votes

Merci Randal ! J'ai fait quelques recherches dans le fichier .ssh/config et j'ai trouvé ceci : github.com/guides/multiple-github-accounts Il m'a mis dans la bonne direction.

7 votes

Cela a été d'une grande aide (en plus de stackoverflow.com/a/3828682/169153 ). Si vous voulez utiliser des clés putty, suivez ce document ici : blog.padraigkitterick.com/2007/09/16/

2 votes

J'ai trouvé ce post très utile. J'ai commis une erreur lors de la création du fichier de configuration : j'ai placé un fichier .txt dans le dossier .ssh au lieu d'exécuter la commande "touch" pour créer un fichier de configuration.

612voto

spacesix Points 4753

Vous pouvez demander à ssh d'essayer plusieurs clés successivement lors de la connexion. Voici comment procéder :

$ 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 utilisera simplement la première clé qui fonctionne.

De plus, vous ne pouvez saisir une phrase de passe que si un serveur donné est prêt à accepter la clé. Comme nous l'avons vu ci-dessus, ssh n'a pas essayé de demander un mot de passe pour les serveurs suivants .ssh/id_rsa même s'il en avait un.

Certes, cela ne surpasse pas 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 !

322voto

oblivion Points 1727

Les réponses précédentes ont bien expliqué la manière de créer un fichier de configuration pour gérer plusieurs clés ssh. Je pense que la chose importante qui doit également être expliquée est le fichier de configuration. remplacement d'un nom d'hôte par un nom d'alias lors du clonage du référentiel .

Supposons que, votre le nom d'utilisateur du compte GitHub de la société est abc1234 . Et supposez que votre le nom d'utilisateur du compte GitHub personnel est jack1234

Et, supposons que vous avez créé deux clés RSA, à savoir id_rsa_company y id_rsa_personnel . Donc, votre configuration ressemblera à ce qui suit :

# 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 (démo nommée) à partir du compte GitHub de l'entreprise, l'URL du dépôt sera quelque chose comme :

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

Maintenant, en faisant git clone vous devez modifier l'URL du référentiel ci-dessus comme suit :

git@company:abc1234/demo.git

Remarquez que github.com est maintenant remplacé par l'alias "company" que nous avons défini dans le fichier de configuration.

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

277voto

peron Points 1441

En réponse de Randal Schwartz m'a presque aidé jusqu'au bout. J'ai un nom d'utilisateur différent sur le serveur, j'ai donc dû ajouter l'élément Utilisateur mot-clé dans mon dossier :

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

Vous pouvez maintenant vous connecter en utilisant le nom d'ami :

ssh friendly-name

Vous trouverez d'autres mots-clés sur le site Page de manuel OpenSSH . NOTE : Certains des mots-clés répertoriés peuvent déjà être présents dans votre entreprise. /etc/ssh/ssh_config fichier.

0 votes

Si je ne me trompe pas, l'utilisateur que vous spécifiez habituellement directement dans l'url lorsque vous vous connectez avec user@host

5 votes

Je préfère également utiliser le mot-clé "Port". Un autre mot-clé intéressant est 'StrictHostKeyChecking'.

118voto

user420807 Points 381
ssh-add ~/.ssh/xxx_id_rsa

Veillez à le tester avant de l'ajouter avec :

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

Si vous rencontrez des problèmes d'erreurs, il est parfois utile de modifier la sécurité du fichier :

chmod 0600 ~/.ssh/xxx_id_rsa

4 votes

C'est la solution la plus succincte et la plus élégante à mon avis. Ça a marché comme sur des roulettes !

0 votes

@Bobo pouvez-vous le mettre dans votre bashrc ou bash_profile (ou quel que soit l'équivalent mac) ?

6 votes

+1 pour chmod 0600 - des problèmes de permissions m'empêchaient de me connecter

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