Se mettre en forme
Pour gérer un dépôt git sous un compte github / bitbucket / quel que soit le compte, il vous suffit de générer une nouvelle clé SSH.
Mais avant de pouvoir commencer à pousser / tirer REPOS avec votre seconde identité, nous dois vous mettre en forme - Supposons que votre système est configuré avec un type id_rsa
et une id_rsa.pub
paire de clés. En ce moment, votre tree ~/.ssh
apparence ressemble à ceci
$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── id_rsa
└── id_rsa.pub
Tout d'abord, nommez cette paire de clés - l'ajout d'un nom descriptif vous aidera à vous rappeler quelle clé est utilisée pour quel utilisateur / télécommande
# change to your ~/.ssh directory
$ cd ~/.ssh
# rename the private key
$ mv id_rsa github-mainuser
# rename the public key
$ mv id_rsa.pub github-mainuser.pub
Ensuite, générons une nouvelle paire de clés - ici, je vais nommer la nouvelle clégithub-otheruser
$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/github-otheruser
Maintenant, quand on regarde tree ~/.ssh
on voit
$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── github-mainuser
├── github-mainuser.pub
├── github-otheruser
└── github-otheruser.pub
Ensuite, nous devons configurer un ~/.ssh/config
fichier qui définira nos configurations clés. Nous allons le créer avec les autorisations appropriées en lecture / écriture uniquement du propriétaire
$ (umask 077; touch ~/.ssh/config)
Ouvrez-le avec votre éditeur préféré et ajoutez le contenu suivant
Host github.com
User git
IdentityFile ~/.ssh/github-mainuser
Host github.com-otheruser
HostName github.com
User git
IdentityFile ~/.ssh/github-otheruser
Vraisemblablement, vous aurez des dépôts existants associés à votre identité github principale. Pour cette raison, github.com "par défaut" Host
est configuré pour utiliser votre mainuser
clé. Si vous ne souhaitez pas privilégier un compte plutôt qu'un autre, je vais vous montrer comment mettre à jour les dépôts existants sur votre système pour utiliser une configuration ssh mise à jour.
Ajoutez votre nouvelle clé SSH à github
Rendez-vous sur github.com/settings/keys pour ajouter votre nouvelle clé publique
Vous pouvez obtenir le contenu de la clé publique en utilisant: copiez / collez-le dans github
$ cat ~/.ssh/github-otheruser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDBVvWNQ2nO5...
Maintenant, votre nouvelle identité d'utilisateur est entièrement configurée - ci-dessous, nous vous montrerons comment l'utiliser.
Faire avancer les choses: cloner un dépôt
Alors, comment cela fonctionne-t-il pour fonctionner avec git et github? Eh bien, parce que vous ne pouvez pas avoir un poulet sans et un œuf, nous examinerons le clonage d'un dépôt existant. Cette situation peut s'appliquer à vous si vous avez un nouveau compte Github pour votre lieu de travail et que vous avez été ajouté à un projet d'entreprise.
Disons github.com/someorg/somerepo
qu'il existe déjà et que vous y avez été ajouté - le clonage est aussi simple que
$ git clone github.com-otheruser:someorg/somerepo.git
Cette partie en gras doit correspondre au Host
nom que nous avons configuré dans votre ~/.ssh/config
fichier. Cela connecte correctement git au correspondant IdentityFile
et vous authentifie correctement avec github
Faire avancer les choses: créer un nouveau référentiel
Eh bien, parce que vous ne pouvez pas avoir un poulet sans et un œuf, nous envisagerons de publier un nouveau dépôt sur votre compte secondaire. Cette situation s'applique aux utilisateurs qui créent un nouveau contenu à l'aide de leur compte github secondaire.
Supposons que vous ayez déjà fait un peu de travail localement et que vous êtes maintenant prêt à pousser vers github. Vous pouvez me suivre si vous le souhaitez
$ cd ~
$ mkdir somerepo
$ cd somerepo
$ git init
Maintenant, configurez ce dépôt pour utiliser votre identité
$ git config user.name "Mister Manager"
$ git config user.email "someuser@some.org"
Faites maintenant votre premier commit
$ echo "hello world" > readme
$ git add .
$ git commit -m "first commit"
Vérifiez le commit pour voir que votre nouvelle identité a été utilisée à l'aide de git log
$ git log --pretty="%H %an <%ae>"
f397a7cfbf55d44ffdf87aa24974f0a5001e1921 Mister Manager <someuser@some.org>
D'accord, il est temps de pousser vers github! Puisque github ne connaît pas encore notre nouveau repo, allez d'abord sur github.com/new et créez votre nouveau repo - nommez-le somerepo
Maintenant, pour configurer votre référentiel pour "parler" à github en utilisant la bonne identité / informations d'identification, nous avons ajouté une télécommande. En supposant que votre nom d'utilisateur github pour votre nouveau compte est someuser
...
$ git remote add origin github.com-otheruser:someuser/somerepo.git
Cette partie en gras est absolument critique et doit correspondre à celle Host
que nous avons définie dans votre ~/.ssh/config
fichier
Enfin, poussez le repo
$ git push origin master
Mettre à jour un référentiel existant pour utiliser une nouvelle configuration SSH
Supposons que vous ayez déjà un référentiel cloné, mais que vous souhaitez maintenant utiliser une nouvelle configuration SSH. Dans l'exemple ci-dessus, nous avons conservé votre repos existant en affectant votre paire précédente id_rsa
/ id_rsa.pub
clé à Host github.com
dans votre fichier de configuration SSH. Il n'y a rien de mal à cela, mais j'ai maintenant au moins 5 configurations github et je n'aime pas penser à l'une d'entre elles comme la configuration "par défaut" - je préfère être explicite à propos de chacune.
Avant d'avoir ça
Host github.com
User git
IdentityFile ~/.ssh/github-mainuser
Host github.com-otheruser
HostName github.com
User git
IdentityFile ~/.ssh/github-otheruser
Nous allons donc maintenant mettre cela à jour (changements en gras )
Host github.com-mainuser
HostName github.com
User git
IdentityFile ~/.ssh/github-mainuser
Host github.com-otheruser
HostName github.com
User git
IdentityFile ~/.ssh/github-otheruser
Mais cela signifie que désormais tout dépôt existant avec une github.com
télécommande ne fonctionnera plus avec ce fichier d'identité. Mais ne vous inquiétez pas, c'est une solution simple.
Pour mettre à jour un référentiel existant pour utiliser votre nouvelle configuration SSH, ouvrez simplement le fichier de configuration git du référentiel et mettez à jour l'URL!
$ cd existingrepo
$ nano .git/config
Mettre à jour le champ d'origine à distance (modifications en gras )
[remote "origin"]
url = github.com-mainuser:someuser/existingrepo.git
fetch = +refs/heads/*:refs/remotes/origin/*
C'est ça. Maintenant, vous pouvez push
/ pull
au contenu de votre cœur
Autorisations du fichier de clé SSH
Si vous rencontrez des problèmes avec vos clés publiques qui ne fonctionnent pas correctement, SSH est assez strict sur les autorisations de fichiers autorisées sur votre ~/.ssh
répertoire et les fichiers de clés correspondants
En règle générale, tous les répertoires doivent l'être 700
et tous les fichiers doivent l'être 600
- cela signifie qu'ils sont en lecture / écriture uniquement par le propriétaire - aucun autre groupe / utilisateur ne peut les lire / écrire
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/config
$ chmod 600 ~/.ssh/github-mainuser
$ chmod 600 ~/.ssh/github-mainuser.pub
$ chmod 600 ~/.ssh/github-otheruser
$ chmod 600 ~/.ssh/github-otheruser.pub
Comment je gère mes clés SSH
Je gère des clés SSH distinctes pour chaque hôte auquel je me connecte, de sorte que si une clé est compromise, je n'ai pas à mettre à jour les clés à tous les autres endroits où j'ai utilisé cette clé. C'est comme lorsque vous recevez la notification d'Adobe que 150 millions des informations de leurs utilisateurs ont été volées - vous devez maintenant annuler cette carte de crédit et mettre à jour tous les services qui en dépendent - quelle nuisance.
Voici à quoi ~/.ssh
ressemble mon annuaire: J'ai une .pem
clé pour chaque utilisateur, dans un dossier pour chaque domaine auquel je me connecte. J'utilise des .pem
clés pour que je n'aie besoin que d' un fichier par clé.
$ tree ~/.ssh
/Users/naomik/.ssh
├── config
├── github.com
│ ├── naomik.pem
│ ├── someusername.pem
├── known_hosts
├── naomi.makes.software
│ ├── naomi.pem
├── somedomain.com
│ ├── someuser.pem
└── someotherdomain.org
└── someuser.pem
Et voici mon /.ssh/config
fichier correspondant - évidemment, le truc github est pertinent pour répondre à cette question sur github, mais cette réponse vise à vous donner les connaissances nécessaires pour gérer vos identités ssh sur n'importe quel nombre de services / machines.
Host github.com-naomik
HostName github.com
User git
IdentityFile ~/.ssh/github.com/naomik.pem
Host github.com-someuser
HostName github.com
User git
IdentityFile ~/.ssh/github.com/someusername.pem
Host naomi.makes.software
User naomi
IdentityFile ~/.ssh/naomi.makes.software/naomi.pem
Host somedomain.com
HostName 162.10.20.30
User someuser
IdentityFile ~/.ssh/somedomain.com/someuser.pem
Host someotherdomain.org
User someuser
IdentityFile ~/.ssh/someotherdomain.org/someuser.pem
Obtenir votre clé publique SSH à partir d'une clé PEM
Ci-dessus, vous avez remarqué que je n'ai qu'un seul fichier pour chaque clé. Lorsque je dois fournir une clé publique, je la génère simplement au besoin.
Donc, quand github demande votre clé publique ssh, exécutez cette commande pour sortir la clé publique sur stdout - copiez / collez là où vous en avez besoin
$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAA...
Remarque, c'est également le même processus que j'utilise pour ajouter ma clé à n'importe quelle machine distante. La ssh-rsa AAAA...
valeur est copiée dans le ~/.ssh/authorized_keys
fichier de la télécommande
Conversion de vos paires id_rsa
/ id_rsa.pub
clés au format PEM
Donc, vous voulez apprivoiser vos fichiers clés et réduire la corruption de votre système de fichiers? Convertir votre paire de clés en un seul PEM est facile
$ cd ~/.ssh
$ openssl rsa -in id_rsa -outform pem > id_rsa.pem
Ou, en suivant nos exemples ci-dessus, nous avons renommé id_rsa -> github-mainuser
et id_rsa.pub -> github-mainuser.pub
- donc
$ cd ~/.ssh
$ openssl rsa -in github-mainuser -outform pem > github-mainuser.pem
Maintenant, juste pour vous assurer que nous avons converti cela correctement, vous voudrez vérifier que la clé publique générée correspond à votre ancienne clé publique
# display the public key
$ cat github-mainuser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA ... R++Nu+wDj7tCQ==
# generate public key from your new PEM
$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA ... R++Nu+wDj7tCQ==
Maintenant que vous avez votre github-mainuser.pem
fichier, vous pouvez supprimer en toute sécurité vos anciens fichiers github-mainuser
et github-mainuser.pub
- seul le fichier PEM est nécessaire; il suffit de générer la clé publique chaque fois que vous en avez besoin ^ _ ^
Création de clés PEM à partir de zéro
Vous n'avez pas besoin de créer la paire de clés privée / publique, puis de la convertir en une seule clé PEM. Vous pouvez créer directement la clé PEM.
Créons un newuser.pem
$ openssl genrsa -out ~/.ssh/newuser.pem 4096
Obtenir la clé publique SSH est la même
$ ssh-keygen -y -f ~/.ssh/newuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACA ... FUNZvoKPRQ==
ssh-add ~/.ssh/id_rsa_COMPANY
<br/> pour dire à l'agent ssh de l'inclure pour utilisation. <hr /> Le repos me convient parfaitement avec le tutoriel mentionné ci-dessus.