Come configurare l’SSH di Git su Bitbucket

27 Mar

Out Of Date Warning

Questo post è stato pubblicato più di 2 anni fa (il 27 marzo 2013). Le idee vanno avanti velocemente, le prospettive cambiano quindi i contenuti potrebbero non essere aggiornati. Ti prego di tenere in considerazione questo, e di verificare le informazioni tecniche presenti nell'articolo prima di farne affidamento per i tuoi scopi.

Recentemente ho scoperto Bitbucket. Per chi non lo conoscesse, si tratta di un’alternativa al più famoso GitHub.
Il vantaggio di Bitbucket è che ti permette di creare repositories privati gratuitamente (a differenza di GitHub).

Questo articolo non si pone lo scopo di spiegarti cos’è Git, nè cos’è Bitbucket (o GitHub) ne tanto meno cosa sia l’SSH. Ma dà per scontato che tu già lo sappia.
Piuttosto vuole mostrarti come utilizzare il protocollo SSH per collegare i tuoi repositories locali a quelli sul sever Bitbucket, soprattutto a chi avesse inizialmente (come me) problemi di autenticazione (Permission denied (publickey).

Utilizzare dei repositories remoti può essere un’alternativa valida anche a chi non ha necessità di condividere il proprio codice con altre persone. Pensate alla possibilità di utilizzarlo come sistema di backup… sfruttando la potenza di Git.

Introduzione

Quando utilizziamo il protocollo HTTPS per comunicare tra il sistema locale e Bitbucket è necessario eseguire l’autenticazione ogni volta che eseguiamo un’azione che comunica con il server (pull e push per esempio).
Utilizzando un’identità SSH per un repository Git, non sarà più necessario digitare la password per ogni interazione con il server Bitbucket.
Questa modalità di autenticazione è basata sul meccanismo della crittografia asimmetrica in cui avremo uno coppia di chiavi (pubblica e privata) responsabili della nostra autenticazione con il server. Da Wikipedia:

Nella fase di accesso, il client ssh prova al server di essere in possesso della chiave privata, e in caso di successo viene consentito l’accesso. In questo modo, all’utente non è richiesto di fornire la propria password ad ogni connessione

In parole povere, quello che serve a noi è un’identità SSH.
Come a avrete capito, questa sarà costituita da una chiave privata ed una pubblica. La chiave privata risiederà localmente sul nostro PC, mentre quella pubblica sarà caricata sul server all’interno del nostro account Bitbucket.
Questo ci permetterà di utilizzare il protocollo SSH per connetterci ai nostri repositories (o a quelli di altri nel caso ci abbiano consentito l’accesso).

Da tenere presente che:

  • Se si dispone di più accounts su Bitbucket non potremo utilizzare la stessa chiave pubblica, ma dovremo creare più identità SSH e caricare la corrispondente chiave pubblica su ogni account.
  • Possiamo associare più identità ad un account Bitbucket. Un esempio classico potrebbe essere la necessità di accedere al repository dal PC di casa e da quello al lavoro.
Gli esempi riportati nei prossimi paragrafi sono stati fatti in un ambiente Windows. Tuttavia funzionano perfettamente anche su sistemi Linux|Mac

Verificare l’esistenza un’identità SSH

Naturalmente potremmo già avere creato un’identità SSH sul nostro computer, tipo se abbiamo già repositories su GitHub. Possiamo controllarlo attraverso la nostra shell Git Bash, la quale è dotata di un client SSH.
Come prima cosa controlliamo di aver installato SSH avviando la shell Git Bash ed inserendo il seguente comando: (nel caso non avessimo installato SSH provvediamo a farlo)

Poi listiamo il contenuto della directory ssh:
Se non abbiamo identità otterremo questo risultato:

altrimenti vedremo due file id:

In questo caso abbiamo un’identità ssh di default, che corrisponde al file id_rsa.pub (rsa vuol dire che l’identità utilizza una criptografia RSA).
Possiamo scegliere di utilizzare questa identità per connetterci a Bitbucket.

Il file id_rsa.pub rappresenta la chiave pubblica mentre il file id_rsa quella privata.

Creare un’identità SSH

Nel caso non avessimo nessuna identità, per crearne una nuova avviamo il terminale Git Bash ed eseguiamo il seguente comando:

Come possiamo notare di default il sistema aggiunge la chiavi di tutte le identità SSH nella directory di lavoro utente: /Users/my-user/.ssh
Diamo invio se accettiamo il percorso, oppure nel caso volessimo cambiare percorso o volessimo creare una nuova identità basta inserire il nuovo path:

Poi ci verrà chiesto di inserire (due volte per conferma) una password, detta passphrase (possiamo anche scegliere di non inserirla… come di solito avviene, altrimenti rischiamo di perdere il vantaggio di non doverla digitare). Vediamo dunque il processo completo:

Listiamo il contenuto ed otterremo:

Le chiavi pubbliche e private sono state create!

Creare un file di configurazione

A questo punto dobbiamo creare un config file all’interno della dir ssh (~/.ssh/config).
Per farlo utilizziamo un editor di testo qualsiasi aggiungendo il seguente testo:

La seconda riga deve contenere il path della chiave privata (nel nostro caso: id_rsa). Inoltre questa riga deve essere indentata con un singolo spazio (importante).
Salviamo il file e riavviamo il terminale GitBash.

Per la cronaca la mancanza di questo file era il motivo per cui avevo problemi di autenticazione. Quindi no saltate questo passaggio.

Installare la chiave pubblica su Bitbucket

Come detto la chiave pubblica deve risiedere sul server. Andiamo ad aggiungerla sul nostro account Bitbucket.
La prima cosa da fare è copiare la chiave pubblica.
La possiamo editare con il comando cat del nostro terminale:

Oppure semplicemente (vedi utenti Windows) editandola con il Notepad (o altro editor).
Quindi apriamo il browser ed andiamo sul sito Bitbucket
Logghiamoci ed andiamo nella gestione del nostro account.
Clicchiamo su SSH keys.
Aggiungiamo (incollandola) la nostra chiave pubblica.
Bit Bucket Add SSH Key
Bene a questo punto, torniamo sul nostro terminale GitBash e lanciamo il seguente comando, che indica quale account Bitbucket può accedere con quella chiave:

dovremmo avere una risposta tipo:

Nel mio caso, visto che ho scelto di aggiungere una passphrase mi chiede di inserirla.

Testiamo importando un repository locale

Se tutto è andato bene, siamo ora pronti per comunicare con il nostro repository.
L’URL che utilizzeremo per le nostre operazioni con il server (clone, put, push etc..) dipende dal tipo di protocollo che decideremo di utilizzare (HTTPS o SSH).

  • HTTPS: https://accountname@bitbucket.org/accountname/reponame.git
  • SSH: ssh://git@bitbucket.org/accountname/reponame.git

Chiaramente noi andremo ad utilizzare il secondo!!!
Supponiamo che abbiamo già un progetto (versionato con GIT naturalmente) e vogliamo importarlo su Bitbucket.
La prima cosa da fare è creare un nuovo repository su Bitbucket.
Poi dal nostro terminale:

Se tutto è andato liscio avremo il nostro progetto pubblicato (privatamente se lo vogliamo) su Bitbucket.
Supponiamo infine di eseguire delle modifiche alla nostra applicazione e volgiamo aggiornare il repository sul server:

E questo è tutto.
Ora abbiamo il nostro reporitory locale in comunicazione con quello remoto attraverso il protocollo SSH. Che ne dite? 😉

Risorse

http://it.wikipedia.org/wiki/Secure_shell
https://confluence.atlassian.com/display/BITBUCKET/Set+up+SSH+for+Git
http://www.git-scm.com/book/it/Git-sul-server-Generare-la-propria-chiave-pubblica-SSH

Lascia un commento