Mettersi in forma
Per gestire un repository git con un account github / bitbucket / qualunque separato, devi semplicemente generare una nuova chiave SSH.
Ma prima di poter iniziare a spingere / estrarre i repository con la tua seconda identità, dobbiamo rimetterti in forma - Supponiamo che il tuo sistema sia configurato con una coppia tipica id_rsa
e id_rsa.pub
chiave. In questo momento il tuo tree ~/.ssh
assomiglia a questo
$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── id_rsa
└── id_rsa.pub
Innanzitutto, assegna un nome a quella coppia di chiavi: l'aggiunta di un nome descrittivo ti aiuterà a ricordare quale chiave viene utilizzata per quale utente / telecomando
# 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
Quindi, generiamo una nuova coppia di chiavi : qui nominerò la nuova chiavegithub-otheruser
$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/github-otheruser
Ora, quando guardiamo tree ~/.ssh
, vediamo
$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── github-mainuser
├── github-mainuser.pub
├── github-otheruser
└── github-otheruser.pub
Successivamente, dobbiamo impostare un ~/.ssh/config
file che definirà le nostre configurazioni chiave. Lo creeremo con le autorizzazioni appropriate di sola lettura / scrittura del proprietario
$ (umask 077; touch ~/.ssh/config)
Aprilo con il tuo editor preferito e aggiungi i seguenti contenuti
Host github.com
User git
IdentityFile ~/.ssh/github-mainuser
Host github.com-otheruser
HostName github.com
User git
IdentityFile ~/.ssh/github-otheruser
Presumibilmente, avrai alcuni repository esistenti associati alla tua identità github primaria. Per questa ragione, il "predefinito" github.com Host
è configurato per usare la tua mainuser
chiave. Se non vuoi favorire un account rispetto a un altro, ti mostrerò come aggiornare i repository esistenti sul tuo sistema per utilizzare una configurazione ssh aggiornata.
Aggiungi la tua nuova chiave SSH a github
Vai su github.com/settings/keys per aggiungere la tua nuova chiave pubblica
Puoi ottenere il contenuto della chiave pubblica usando: copia / incolla su github
$ cat ~/.ssh/github-otheruser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDBVvWNQ2nO5...
Ora la tua nuova identità utente è tutta configurata - di seguito ti mostreremo come usarla.
Fare cose: clonare un repository
Quindi, come si fa a lavorare insieme con git e github? Bene perché non puoi avere un pollo senza e un uovo, vedremo come clonare un repository esistente. Questa situazione potrebbe applicarsi a te se hai un nuovo account github per il tuo posto di lavoro e sei stato aggiunto a un progetto aziendale.
Diciamo che github.com/someorg/somerepo
esiste già e ti è stato aggiunto - la clonazione è facile come
$ git clone github.com-otheruser:someorg/somerepo.git
Quella parte in grassetto deve corrispondere al Host
nome che abbiamo impostato nel tuo ~/.ssh/config
file. Che collega correttamente Git al corrispondente IdentityFile
e ti autentica correttamente con Github
Fare cose: creare un nuovo repository
Bene perché non puoi avere un pollo senza e un uovo, vedremo la pubblicazione di un nuovo repository sul tuo account secondario. Questa situazione si applica agli utenti che creano nuovi contenuti utilizzando il proprio account github secondario.
Supponiamo che tu abbia già fatto un po 'di lavoro a livello locale e ora sei pronto a spingere su Github. Puoi seguirmi se vuoi
$ cd ~
$ mkdir somerepo
$ cd somerepo
$ git init
Ora configura questo repository per usare la tua identità
$ git config user.name "Mister Manager"
$ git config user.email "someuser@some.org"
Ora fai il tuo primo commit
$ echo "hello world" > readme
$ git add .
$ git commit -m "first commit"
Controlla il commit per vedere che la tua nuova identità è stata usata usando git log
$ git log --pretty="%H %an <%ae>"
f397a7cfbf55d44ffdf87aa24974f0a5001e1921 Mister Manager <someuser@some.org>
Bene, è ora di spingere su Github! Poiché github non è ancora a conoscenza del nostro nuovo repository, prima vai su github.com/new e crea il tuo nuovo repository - chiamalo somerepo
Ora, per configurare il tuo repository affinché "parli" con github usando l'identità / le credenziali corrette, abbiamo aggiunto un telecomando. Supponendo che il tuo nome utente github per il tuo nuovo account sia someuser
...
$ git remote add origin github.com-otheruser:someuser/somerepo.git
Quella parte in grassetto è assolutamente fondamentale e deve corrispondere a quella Host
che abbiamo definito nel tuo ~/.ssh/config
file
Infine, spingere il repository
$ git push origin master
Aggiorna un repository esistente per utilizzare una nuova configurazione SSH
Supponiamo che tu abbia già clonato alcuni repository, ma ora desideri utilizzare una nuova configurazione SSH. Nell'esempio sopra, abbiamo mantenuto intatti i tuoi repository esistenti assegnando la tua coppia precedente id_rsa
/ id_rsa.pub
chiave al Host github.com
tuo file di configurazione SSH. Non c'è niente di sbagliato in questo, ma ora ho almeno 5 configurazioni github e non mi piace pensare a una di esse come la configurazione "predefinita" - Preferirei essere esplicita su ognuna.
Prima che avessimo questo
Host github.com
User git
IdentityFile ~/.ssh/github-mainuser
Host github.com-otheruser
HostName github.com
User git
IdentityFile ~/.ssh/github-otheruser
Quindi ora aggiorneremo questo a questo (modifiche in grassetto )
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
github.com
Ciò significa che ora qualsiasi repository esistente con un telecomando non funzionerà più con questo file di identità. Ma non preoccuparti, è una soluzione semplice.
Per aggiornare un repository esistente per utilizzare la nuova configurazione SSH, è sufficiente aprire il file di configurazione git del repository e aggiornare l'URL!
$ cd existingrepo
$ nano .git/config
Aggiorna il campo di origine remoto (modifiche in grassetto )
[remote "origin"]
url = github.com-mainuser:someuser/existingrepo.git
fetch = +refs/heads/*:refs/remotes/origin/*
Questo è tutto. Ora puoi push
/ pull
al contenuto del tuo cuore
Autorizzazioni per file chiave SSH
Se stai riscontrando problemi con le tue chiavi pubbliche non funzionano correttamente, SSH è piuttosto severo sulle autorizzazioni dei file consentite sulla tua ~/.ssh
directory e sui file delle chiavi corrispondenti
Come regola generale, tutte le directory dovrebbero essere 700
e tutti i file dovrebbero essere 600
- questo significa che sono di sola lettura / scrittura del proprietario - nessun altro gruppo / utente può leggerli / scriverli
$ 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
Come gestisco le mie chiavi SSH
Gestisco chiavi SSH separate per ogni host a cui mi connetto, in modo tale che se una qualsiasi chiave viene mai compromessa, non devo aggiornare le chiavi in ogni altro posto in cui ho usato quella chiave. È come quando ricevi la notifica da Adobe che sono state rubate 150 milioni delle informazioni dei loro utenti - ora devi cancellare quella carta di credito e aggiornare tutti i servizi che dipendono da essa - che seccatura.
Ecco ~/.ssh
come appare la mia directory: ho una .pem
chiave per ogni utente, in una cartella per ogni dominio a cui mi connetto. Uso le .pem
chiavi per aver bisogno di un solo file per chiave.
$ 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
Ed ecco il mio /.ssh/config
file corrispondente - ovviamente la roba di github è rilevante per rispondere a questa domanda su github, ma questa risposta ha lo scopo di fornirti le conoscenze per gestire le tue identità ssh su qualsiasi numero di servizi / macchine.
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
Ottenere la chiave pubblica SSH da una chiave PEM
Sopra hai notato che ho solo un file per ogni chiave. Quando ho bisogno di fornire una chiave pubblica, la generi semplicemente secondo necessità.
Quindi quando github richiede la tua chiave pubblica ssh, esegui questo comando per generare la chiave pubblica su stdout - copia / incolla dove necessario
$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAA...
Nota, questo è anche lo stesso processo che uso per aggiungere la mia chiave a qualsiasi macchina remota. Il ssh-rsa AAAA...
valore viene copiato nel ~/.ssh/authorized_keys
file del telecomando
Conversione delle coppie id_rsa
/ id_rsa.pub
chiave in formato PEM
Quindi vuoi domare i tuoi file chiave e ridurti a qualche cruft di file system? Convertire la coppia di chiavi in un singolo PEM è semplice
$ cd ~/.ssh
$ openssl rsa -in id_rsa -outform pem > id_rsa.pem
Oppure, seguendo i nostri esempi precedenti, abbiamo rinominato id_rsa -> github-mainuser
e id_rsa.pub -> github-mainuser.pub
- così
$ cd ~/.ssh
$ openssl rsa -in github-mainuser -outform pem > github-mainuser.pem
Ora solo per assicurarci di averlo convertito correttamente, vorrai verificare che la chiave pubblica generata corrisponda alla tua vecchia chiave pubblica
# 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==
Ora che hai il tuo github-mainuser.pem
file, puoi tranquillamente eliminare i tuoi vecchi github-mainuser
e github-mainuser.pub
file - è necessario solo il file PEM; genera la chiave pubblica ogni volta che ti serve ^ _ ^
Creazione di chiavi PEM da zero
Non è necessario creare la coppia di chiavi privata / pubblica e quindi convertirla in una singola chiave PEM. È possibile creare direttamente la chiave PEM.
Creiamo un newuser.pem
$ openssl genrsa -out ~/.ssh/newuser.pem 4096
Ottenere la chiave pubblica SSH è la stessa
$ ssh-keygen -y -f ~/.ssh/newuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACA ... FUNZvoKPRQ==
ssh-add ~/.ssh/id_rsa_COMPANY
<br/> di dire all'agente ssh di includerlo per l'uso. <hr /> Rest funziona bene con il tutorial sopra menzionato.