2012-07-25 12 views
34

Quindi, ho un host, chiamalo rob. Ho usato ssh-keygen su rob per ottenere una chiave pubblica, che ho dato a github nell'aggiunta di una nuova schermata chiave di distribuzione per il repository cheech. Ora voglio distribuire chong su rob pure. Ma se vado a aggiungere la nuova schermata chiave di deploy per il repository chong su github, e incollare la chiave pubblica che ho generato su rob dice key already in use. Ho pensato, se la chiave fosse in uso, potrei clonare chong su rob ma questo dice il permesso negato.github deploy key: come autorizzo più di un repository per una singola macchina

Quindi chiaramente questo è più complicato di quanto pensassi e comporta l'avere più chiavi o qualcosa del genere. Cosa devo fare per clonare chong su rob?

Grazie per il vostro aiuto.

risposta

2

Se sei a tuo agio dando rob accesso a tutti gli archivi privati ​​nel tuo account GitHub, è possibile rimuovere la chiave come chiave Deploy da cheech e quindi aggiungilo come chiave SSH al tuo account GitHub nel suo complesso. Ciò darebbe l'accesso a rob sia a cheech sia a chong.

Questo non funzionerà se si dispone di altri repository nel proprio account che non si desidera che rob acceda.

Se è necessario un controllo più preciso, è necessario generare chiavi aggiuntive su rob e assegnarle come chiavi di distribuzione a repository specifici.

57

Una volta che una chiave è stata collegata a un repository come chiave di distribuzione, non può essere utilizzata su un altro repository. Se si sta eseguendo in questo errore durante l'impostazione fino distribuire le chiavi, allora avrete bisogno di modificare il telecomando e configurare il file ~/.ssh/config utilizzare un inesistente github.com hostname che ssh sarà in grado di utilizzare per selezionare la chiave di distribuzione ssh corretta per il repository .

# first we remove the origin 
$ git remote -v 
origin [email protected]:username/foo.git (fetch) 
origin [email protected]:username/foo.git (push) 
$ git remote rm origin 

# here we add a new origin using a host nickname called 
# foo.github.com that we will reference with a Host stanza in our 
# ~/.ssh/config to specify which key to use with which fake hostname. 
$ git remote add origin [email protected]:username/foo.git 
$ git remote -v 
origin [email protected]:username/foo.git (fetch) 
origin [email protected]:username/foo.git (push) 

generare la chiave di implementare per il repository e il nome è qualcosa di ragionevole simile:

$ ssh-keygen -t rsa -f ~/.ssh/id_rsa-foo -C https://github.com/username/foo 
Generating public/private rsa key pair. 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/username/.ssh/id_rsa-foo. 
Your public key has been saved in /home/username/.ssh/id_rsa-foo.pub. 
The key fingerprint is: 
c0:ff:ee:34:24:11:5e:6d:7c:4c:b1:a0:de:ad:be:ef https://github.com/username/foo 
The key's randomart image is: 
+--[ RSA 2048]----+ 
| E o..o.oo. | 
| M o o o .+CoW | 
| + o = o. .. | 
| . . +   | 
|  S  | 
|  o .  | 
|  +  | 
|  . o  | 
|  ..o.  | 
+-----------------+ 

Una volta che hai added the deploy key Sarà quindi necessario aggiungere la seguente stanza al file ~/.ssh/config:

Host fake-hostname-foo.github.com 
    Hostname github.com 
    IdentityFile ~/.ssh/id_rsa-foo 

Ora è possibile testarlo con:

$ ssh -T [email protected] 
Hi username! You've successfully authenticated, but GitHub 
does not provide shell access. 
+2

Ottima risposta e molto utile. Ha funzionato perfetto Grazie –

+1

Non capisco cosa sia falso qui? Genera un'altra chiave. Ogni seconda chiave è chiamata "un falso"? –

+0

@LittleAlien il nome host 'foo' in' foo.github.com' è la parte finta (alias inesistente). Puoi creare tutto ciò che vuoi per il nome host. Ho chiarito la voce con 'fake-hostname-foo.github.com' invece di solo' foo.github.com'. – aculich

11

La soluzione più semplice che ho trovato è stata delineata here.

1) Digitare il seguente comando (Farete questo per tuttavia molte tasti necessari):

ssh-keygen -t rsa -C "[email protected]"

2) Quando viene richiesto con la seguente istruzione digitare un nome univoco (ad esempio, foo1_rsa). Il file verrà creato nella directory corrente e potrebbe essere necessario spostarlo su .ssh se si desidera essere in ordine:

Inserire il file in cui salvare la chiave (/Users/you/.ssh/id_rsa): [Premere Invio]

3) Aggiorna il tuo SSH file di configurazione:

vi ~/.ssh/config

che può essere vuoto:

Host cheech github.com 
Hostname github.com 
IdentityFile ~/.ssh/foo1_rsa 

Host chong github.com 
Hostname github.com 
IdentityFile ~/.ssh/foo2_rsa 
1

La gestione di più chiavi di distribuzione GitHub può essere semplificata con il mio piccolo modulo npmgithub-add-key. Esso utilizza il metodo descritto in this grande risposta, e tutto ciò che serve è

$ github-add-chiave Rob/chong

nel vostro locale clonato rob/chong e seguire il semplice processo automatizzato.

0

Mentre l'idea di Pimkin è stato grande, non volevo installare node solo per questo, così ho creato qualcosa di simile in bash:

https://gist.github.com/blvz/8eeebacae11011c25fc79eff12f49ae9

installare e utilizzare:

curl https://gist.githubusercontent.com/blvz/8eeebacae11011c25fc79eff12f49ae9/raw/6f2f7f3709a0fe852d8a3a5bb125325e3ffbc7d8/gh-deploy-clone.sh > /usr/local/bin/gh-deploy-clone 
chmod +x /usr/local/bin/gh-deploy-clone 

gh-deploy-clone user/repo 

# You can also give it a name, in case 
# you have multiple deploy targets: 

gh-deploy-clone user/repo staging 
1

So che questo ha più di 5 anni ma non c'è una risposta accettata a questa domanda così popolare ecco qui quello che considero il modo migliore considerando la pulizia e la leggibilità futura:


aggiungere un utente distribuire agli TEAM

Fase 1: Creare un nuovo indirizzo di posta elettronica nel dominio dell'organizzazione per un nuovo distribuire utente. Qualcosa come [email protected].

Fase 2: Utilizzare tale cassetta postale per creare un nuovo account GitHub (GitHub calls these "machine users") dargli un nome utente come deploy-ExampleOrganisation quindi il suo ruolo è chiaro.

Fase 3: Creare un utente sul server chiamato "distribuire" con un comando come questo:

useradd -d /home/deploy -m deploy 

generare una chiave SSH per implementare @ servername, specificando senza passphrase e /home/deploy/.ssh/id_rsa come la posizione del file:

ssh-keygen -t rsa -b 4096 -C "[email protected]" 

Aggiungere il conte nti di /home/deploy/.ssh/id_rsa.pub come una chiave SSH sul vostro nuovo account GitHub -ExampleOrganisation Deploy: Vai Impostazioni> SSH e le chiavi GPG> Nuova SSH Key.

Fase 4: creare un team all'interno dell'organizzazione chiama qualcosa come "Sola lettura distribuire agli utenti", aggiungere il nuovo utente alla squadra e dare alla squadra accesso in lettura a tutti i pronti contro termine che verrà distribuito. (Se non si dispone di un account organizzazione è ancora possibile fornire l'autorizzazione all'accesso a più pronti contro termine privati)

Fase 5: Aggiungere la vostra chiave SSH di macchina personale per distribuire file di chiavi autorizzate dell'utente (/ home /deploy/.ssh/authorized_keys) in modo che tu (o lo script di distribuzione) possa accedere come distribuire durante la distribuzione del codice.

Boom! Questo è tutto ... Ora hai un flusso pulito e autodocumentato.


P.S. Ho provato la risposta altamente acclamata di aculich, ma mi sono sentita sporca in giro con nomi di host falsi e ho pensato, se tornassi su questo in un periodo di tempo, riuscirò a capire facilmente cosa ho fatto per creare tutte le chiavi e capire come quel file di configurazione SSH fa funzionare quei simpatici indirizzi remoti inesistenti? Probabilmente no!

I vantaggi di un utente implementare oltre falso metodo di nomi di host:

  • nessun hack! Si tratta di account utente standard con nomi chiari, che accedono ai repository tramite nomi di host reali.
  • Meno tasti fluttuanti.
  • Se/quando ci si sposta su server aggiuntivi, è facile assegnare un account a tutti gli utenti di distribuzione e solo aggiungendo 1 nuova chiave al proprio account GitHub, il suo account sul nuovo server è pronto per la distribuzione del codice.
  • L'utente di distribuzione ha un accesso di sola lettura con privilegi limitati solo ai repository elencati nel team e le chiavi SSH personali vengono mantenute fuori dal server, quindi se qualche persona cattiva accede al server non può sfondare anche tutti i tuoi repository.
  • Distribuire i file di configurazione dello strumento (ad es. Capistrano) non essere sporcati contenenti quei nomi host falsi e confusi. (È stato quando hanno iniziato a diffondersi al di là del server che mi sono davvero sentito a disagio con questo metodo.)
  • Se dimentichi come diavolo l'hai fatto in anni la proprietà del file ti porterà all'utente di distribuzione ls -la, la chiave SSH ti condurrà al nome dell'account GitHub ssh -T [email protected] e speriamo che tu possa riprendere completamente.
  • E infine ... è il metodo consigliato da GitHub.
Problemi correlati