Je souhaite utiliser plusieurs clés privées pour me connecter à différents serveurs ou à différentes parties d'un même serveur (mes utilisations sont l'administration système du serveur, l'administration de Git et l'utilisation normale de Git sur le même serveur). J'ai simplement essayé d'empiler les clés dans les fichiers id_rsa
en vain.
Apparemment, un moyen simple de le faire est d'utiliser la commande
ssh -i <key location> [email protected]
C'est assez lourd.
Des suggestions sur la façon de s'y prendre un peu plus facilement?
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
Etc.
Vous pouvez demander à ssh d'essayer plusieurs clés successivement 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 ne vous reste plus qu'à utiliser la première clé de travail.
De plus, vous ne saisirez une phrase secrète que si un serveur donné est prêt à accepter la clé. Comme on le voit ci-dessus, ssh n'a pas essayé de demander un mot de passe pour .ssh/id_rsa
même s'il en avait un.
Certes, elle ne surpasse pas la configuration par serveur comme dans les autres réponses, mais au moins vous n’aurez pas à ajouter de configuration pour tous les serveurs auxquels vous vous connectez!
Le réponse de Randal Schwartz m'a presque aidé tout le chemin. J'ai un nom d'utilisateur différent sur le serveur, je devais donc ajouter le mot clé Utilisateur à 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 convivial:
ssh friendly-name
Vous trouverez plus de mots-clés sur le page de manuel OpenSSH . REMARQUE: Certains des mots-clés répertoriés sont peut-être déjà présents dans votre fichier /etc/ssh/ssh_config . .
foo:~$ssh-add ~/.ssh/xxx_id_rsa
Assurez-vous de le tester avant d'ajouter avec:
ssh -i ~/.ssh/xxx_id_rsa [email protected]
Si vous rencontrez des problèmes avec des erreurs, il est parfois utile de modifier la sécurité du fichier:
chmod 0600 ~/.ssh/xxx_id_rsa
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 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 supposons que votre le nom d'utilisateur du compte personnel GitHub est jack1234
Et supposons que vous ayez créé deux clés RSA, à savoir id_rsa_company et id_rsa_personal. Ainsi, votre fichier 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 référentiel (nommé démo) à partir du compte GitHub de la société, l'URL du référentiel ressemblera à quelque chose: :
Repo URL: [email protected]:abc1234/demo.git
Maintenant, tout en faisant git clone
, vous devez modifier l’URL du référentiel ci-dessus comme suit:
git@company:abc1234/demo.git
Notez comment github.com est maintenant remplacé par l'alias "company" tel que défini dans le fichier de configuration.
De même, vous devez modifier l'URL de clone du référentiel dans le compte personnel en fonction de l'alias fourni dans le fichier de configuration.
Générer une clé SSH:
$ ssh-keygen -t rsa -C <[email protected]>
Générer another SSH key
:
$ ssh-keygen -t rsa -f ~/.ssh/accountB -C <[email protected]>
Maintenant, deux clés publiques ( id_rsa.pub , accountB.pub ) devrait exister dans le répertoire ~/.ssh/
.
$ ls -l ~/.ssh # see the files of '~/.ssh/' directory
Créez le 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
Cloner à partir du compte default
.
$ git clone [email protected]:username/project.git
Cloner à partir du compte accountB
.
$ git clone git@bitbucket-accountB:username/project.git
Je suis d'accord avec Tuomas sur l'utilisation de ssh-agent. Je voulais aussi ajouter une deuxième clé privée pour travailler et ce tutoriel a fonctionné comme un charme pour moi.
Les étapes sont les suivantes:
$ ssh-agent bash
$ ssh-add /path.to/private/key
par exemple ssh-add ~/.ssh/id_rsa
$ ssh-add -l
$ssh -v <Host url>
par exemple ssh -v [email protected]
J'avais 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. 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, lorsque je devais cloner un référentiel à partir de mon compte professionnel, la commande était la suivante.
git clone [email protected]:teamname/project.git
J'ai dû modifier cette commande pour:
git clone git@**work**.bitbucket.org:teamname/project.git
De même, la commande de clone de mon compte personnel a dû être modifiée pour
git clone git @ personnel . bitbucket.org:name/personalproject.git
Reportez-vous à ce lien pour plus d'informations.
Utilisez ssh-agent pour vos clés.
Maintenant, avec la version récente de git, nous pouvons spécifier sshCommand dans un fichier de configuration git spécifique au référentiel.
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
sshCommand = ssh -i ~/.ssh/id_rsa_user
[remote "Origin"]
url = [email protected]:user/repo.git
fetch = +refs/heads/*:refs/remotes/Origin/*
Sur ubuntu 18.04 il n’ya rien à faire.
Après avoir créé avec succès une deuxième clé ssh, le système essaiera de trouver une clé ssh correspondante pour chaque connexion.
Pour être clair, vous pouvez créer une nouvelle clé avec ces commandes
# generate key make sure you give it a new name (id_rsa_server2)
ssh-keygen
# make sure ssh agent is running
eval `ssh-agent`
# add the new key
ssh-add ~/.ssh/id_rsa_server2
# get the public key to add it to a remote system for authentication
cat ~/.ssh/id_rsa_server2.pub
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
IMPORTANT: Vous devez démarrer ssh-agent
Vous devez démarrer ssh-agent (s'il ne s'exécute pas déjà) 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.
Comme mentionné sur page du blog atlassian générer une config dans . Ssh , y compris le texte suivant:
#user1 account
Host bitbucket.org-user1
HostName bitbucket.org
User git
IdentityFile ~/.ssh/user1
IdentitiesOnly yes
#user2 account
Host bitbucket.org-user2
HostName bitbucket.org
User git
IdentityFile ~/.ssh/user2
IdentitiesOnly yes
Ensuite, vous pouvez simplement valider avec le domaine de suffixe et, dans les projets, vous pouvez configurer les noms d’auteurs, etc. localement.
Sur Centos 6.5 exécutant OpenSSH_5.3p1, OpenSSL 1.0.1e-fips, j'ai résolu le problème en renommant mes fichiers de clé de sorte qu'aucun d'entre eux ne porte le nom par défaut. Mon répertoire .ssh contient id_rsa_foo et id_rsa_bar mais pas id_rsa, etc.