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?
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.
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 .
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!
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
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.
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:
-
$ ssh-agent bash
-
$ ssh-add /path.to/private/key
E. gssh-add ~/.ssh/id_rsa
- vérifier par
$ ssh-add -l
- tester avec
$ssh -v <host url>
E. gssh -v git@assembla.com
-
Générer la clé SSH:
$ ssh-keygen -t rsa -C <email1@example.com>
-
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
-
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
-
Clone du compte
default
.$ git clone git@bitbucket.org:username/project.git
-
Clone du compte
accountB
.$ git clone git@bitbucket-accountB:username/project.git
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.
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/*
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.
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
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.