Come generare chiavi SSH per GitHub

Pubblicato: 2022-02-05

Git e GitHub sono strumenti essenziali per ogni sviluppatore. Sono ampiamente utilizzati in quasi tutti i tipi di progetti di sviluppo software.

Esistono altri servizi di hosting Git come Gitlab e Bitbucket, ma GitHub è la scelta più popolare per gli sviluppatori. Puoi persino modificare il tuo profilo per sembrare più attraente per i reclutatori.

Puoi usare Git e GitHub per organizzare i tuoi progetti, collaborare con altri sviluppatori e, ovviamente, su Kinsta.

Ma poiché Git e GitHub sono strumenti correlati ma diversi, è necessario aggiornare costantemente il flusso di lavoro con ciascuno di essi.

Ti consigliamo di utilizzare le chiavi SSH per ciascuna delle tue macchine. Quindi, in questo tutorial, imparerai cosa sono, alcuni dei loro vantaggi e come generare e configurare le chiavi SSH di GitHub.

Iniziamo!

Cosa sono le chiavi SSH?

In poche parole, le chiavi SSH sono credenziali utilizzate per il protocollo SSH (Secure Shell) per consentire l'accesso sicuro ai computer remoti su Internet. Di solito, tale autenticazione avviene in un ambiente a riga di comando.

Questo protocollo si basa sull'architettura client-server, il che significa che l'utente (o "client") deve utilizzare un software speciale, chiamato client SSH, per accedere a un server remoto ed eseguire comandi. Questo è fondamentalmente ciò che stai facendo durante l'autenticazione tramite un terminale su GitHub.

Terminale che mostra due comandi: "git commit -am" Aggiunto commento nel file di esempio di programmazione strutturata" e "git push" con la risposta di successo dal server GitHub
Dai, spingi.

Ma SSH non viene utilizzato solo per GitHub. È ampiamente utilizzato da altre piattaforme come Kinsta, Google Cloud e Amazon Web services per creare un canale sicuro per accedere ai propri servizi.

Ora, esaminando come funzionano davvero le chiavi SSH, è necessario comprendere le differenze tra le chiavi pubbliche e private.

Chiavi pubbliche e private

Cominciamo con le basi.

Il protocollo SSH utilizza una tecnica di crittografia chiamata crittografia asimmetrica . Questo termine può sembrare complicato e strano, ma nulla potrebbe essere più lontano dalla verità.

Fondamentalmente, la crittografia asimmetrica è un sistema che utilizza una coppia di chiavi, ovvero chiavi pubbliche e private .

Come puoi immaginare, la chiave pubblica può essere condivisa con chiunque. Il suo scopo principale è crittografare i dati, convertendo il messaggio in codice segreto o testo cifrato. Questa chiave viene solitamente inviata ad altri sistemi, ad esempio server, per crittografare i dati prima di inviarli su Internet.

D'altra parte, la chiave privata è quella che devi tenere per te. Viene utilizzato per decrittografare i dati crittografati con la chiave pubblica. Senza di esso, è impossibile decodificare le tue informazioni crittografate.

Questo metodo consente a te e al server di mantenere un canale di comunicazione sicuro per la trasmissione delle informazioni.

Ecco cosa succede in background quando ti connetti a un server tramite SSH:

  1. Il client invia la chiave pubblica al server.
  2. Il server chiede al client di firmare un messaggio casuale crittografato con la chiave pubblica utilizzando la chiave privata.
  3. Il client firma il messaggio e inoltra il risultato al server.
  4. Viene stabilita una connessione sicura tra il client e il server.

È importante mantenere le tue chiavi private al sicuro e condividerle con nessuno in nessun caso. Sono letteralmente la chiave di tutte le informazioni che ti vengono inviate.

Utilizzo di chiavi SSH con GitHub

Dal 13 agosto 2021, Github non accetta più l'autenticazione tramite password per l'accesso alla riga di comando. Ciò significa che ora devi autenticarti tramite un token di accesso personale o utilizzare una chiave SSH (un po' più conveniente).

Ecco cosa succede quando provi ad autenticarti con la tua password GitHub su HTTP in un terminale:

 Username for 'https://github.com': yourusername Password for 'https://[email protected]': remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information. fatal: Authentication failed for 'https://github.com/yourusername/repository.git/'

GitHub ha bisogno della tua chiave pubblica per autorizzarti a modificare qualsiasi tuo repository tramite SSH.

Vediamo come generare le chiavi SSH localmente.

Come generare chiavi SSH in locale

Ora che hai compreso un po' il protocollo SSH e le differenze tra le chiavi pubbliche e private, è il momento di configurare il canale SSH sicuro tra la tua macchina e i tuoi repository GitHub.

Prima di andare avanti, dovresti già avere un account GitHub e un terminale/prompt dei comandi con Git installato nel tuo sistema. Se stai utilizzando Windows, assicurati di aver installato Git bash, che ha tutti gli strumenti necessari per seguire insieme a questo tutorial integrato.

Il client OpenSSH è il software open source più popolare utilizzato per la connessione tramite SSH. Non dovrai preoccuparti del tuo sistema operativo perché è installato per impostazione predefinita su Linux, macOS e Windows 10.

È necessario avviare un prompt dei comandi su Windows o un terminale su sistemi basati su Unix per generare chiavi SSH locali. Di solito, puoi farlo cercando "terminal", "cmd" o "powershell" nel pannello dell'applicazione, quindi facendo clic sull'icona visualizzata.

Trova applicazioni che mostra diverse applicazioni terminali, tra cui "Emulatore di terminale", "Alacritty" e "Kitty".
Ricerca dell'applicazione terminale.

Dopo aver fatto ciò, dovresti avere una finestra simile all'immagine seguente.

Applicazione terminale semitrasparente che esegue il guscio di pesce.
Applicazione terminale.

Eseguire il comando seguente per generare una coppia di chiavi SSH locale:

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

È ora di svelarti un segreto: nessuno può davvero ricordare questo comando! La maggior parte degli sviluppatori deve cercare su Google ogni volta perché:

  1. È un comando davvero lungo, con numeri dimenticabili e apparentemente casuali.
  2. Lo usiamo raramente, quindi non vale la pena memorizzarlo la maggior parte delle volte.

Tuttavia, è importante comprendere ogni comando che introduciamo nei nostri terminali, quindi vediamo cosa significa ogni parte di questo.

  • ssh-keygen: lo strumento da riga di comando utilizzato per creare una nuova coppia di chiavi SSH. Puoi vedere le sue bandiere con ssh-keygen help
  • -t ed25519: Il flag -t viene utilizzato per indicare l'algoritmo utilizzato per creare la firma digitale della coppia di chiavi. Se il tuo sistema lo supporta, ed25519 è il miglior algoritmo che puoi utilizzare per creare coppie di chiavi SSH.
  • -C "email": il flag -c viene utilizzato per fornire un commento personalizzato alla fine della chiave pubblica, che di solito è l'e-mail o l'identificazione del creatore della coppia di chiavi.

Dopo aver digitato il comando nel tuo terminale, dovrai inserire il file in cui desideri salvare le chiavi. Per impostazione predefinita, si trova nella tua home directory, in una cartella nascosta denominata ".ssh", ma puoi cambiarla come preferisci.

Quindi ti verrà richiesta una passphrase da aggiungere alla tua coppia di chiavi. Questo aggiunge un ulteriore livello di sicurezza se, in qualsiasi momento, il tuo dispositivo viene compromesso. Non è obbligatorio aggiungere una passphrase, ma è sempre consigliato.

Ecco come appare l'intero processo:

comando ssh-keygen con vari messaggi incluso il file le chiavi verranno salvate "/home/daniel/.ssh/kinsta_keys", l'input della passphrase e l'impronta digitale della chiave risultante.
comando ssh-keygen.

Come puoi vedere, questo comando genera due file nella directory che hai selezionato (comunemente ~/.ssh ): la chiave pubblica con estensione .pub e quella privata senza estensione.

Ti mostreremo come aggiungere la chiave pubblica al tuo account GitHub in seguito.

Aggiungi la chiave SSH a ssh-agent

Il programma ssh-agent viene eseguito in background, conserva le tue chiavi private e le passphrase in modo sicuro e le tiene pronte per l'uso da parte di ssh. È un'ottima utility che ti evita di digitare la tua passphrase ogni volta che desideri connetterti a un server.

Per questo motivo, aggiungerai la tua nuova chiave privata a questo agente. Ecco come:

  1. Assicurati che ssh-agent sia in esecuzione in background.
     eval `ssh-agent` # Agent pid 334065

    Se ricevi un messaggio simile a questo se tutto è a posto. Significa che ssh-agent è in esecuzione con un particolare ID processo (PID).

  2. Aggiungi la tua chiave privata SSH (quella senza estensione) all'agente ssh.
     ssh-add ~/.ssh/kinsta_keys

    Sostituisci kinsta_keys con il nome della tua chiave SSH. Se questa è la prima chiave che hai creato, dovrebbe essere denominata "id_algorithm_used", ad esempio, id_ed25519 .

Aggiungi la chiave SSH all'account GitHub

Il passaggio finale consiste nell'aggiungere la tua chiave pubblica al tuo account GitHub. Basta seguire queste istruzioni:

  1. Copia la tua chiave pubblica SSH negli appunti. Puoi aprire il file in cui si trova con un editor di testo e copiarlo, oppure utilizzare il terminale per mostrarne il contenuto.
     cat ~/.ssh/kinsta_keys.pub # ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJl3dIeudNqd0DPMRD6OIh65tjkxFNOtwGcWB2gCgPhk [email protected]
  2. Accedi a GitHub ] e vai nella sezione in alto a destra della pagina, fai clic sulla foto del tuo profilo e seleziona Impostazioni.

    Pannello in alto a destra di GitHub che mostra diverse sezioni con una freccia che punta alla sezione Impostazioni.
    Impostazioni di GitHub.

  3. Quindi, nel profilo delle tue impostazioni, fai clic su Chiavi SSH e GPG .

    Pannello delle impostazioni del profilo che mostra l'opzione delle chiavi SSH e GPG.
    Chiavi SSH e GPG.

  4. Fare clic sul pulsante Nuova chiave SSH .

    Sezione chiavi SSH con una freccia che punta al pulsante Nuova chiave SSH.
    Nuovo pulsante chiave SSH.

  5. Assegna un titolo alla tua nuova chiave SSH su GitHub, in genere il dispositivo da cui utilizzerai quella chiave. E quindi incollare la chiave nell'area Chiave .

    Aggiungi un nuovo modulo di chiave SSH con i campi "Titolo" e "Chiave".
    Aggiungi un nuovo modulo chiave SSH.

  6. Aggiungi la tua chiave SSH.

    Pulsante Aggiungi chiave SSH.
    Pulsante Aggiungi chiave SSH.

Testare la connessione SSH con un push Repo

È tempo di testare tutto ciò che hai fatto finora. Modificherai, eseguirai il commit e trasferirai a uno dei tuoi repository esistenti utilizzando SSH per assicurarti che la tua connessione sia impostata correttamente.

Tutti i piani di hosting Kinsta includono il supporto 24 ore su 24, 7 giorni su 7 da parte dei nostri sviluppatori e ingegneri WordPress veterani. Chatta con lo stesso team che supporta i nostri clienti Fortune 500. Dai un'occhiata ai nostri piani!

Per il nostro esempio, modificheremo il semplice sito HTML che abbiamo creato nel nostro tutorial su Git per lo sviluppo Web.

Per prima cosa, dovremo clonare il repository nella nostra macchina locale. Possiamo andare alla pagina del repository su GitHub e copiare l'indirizzo SSH che fornisce.

Pagina GitHub che mostra il comando clone SSH.
Comando clone SSH.

Quindi, clona il repository usando un terminale:

 git clone [email protected]:DaniDiazTech/HTML-site.git

Ora aggiungiamo un semplice tag <h1> nel file index.html :

 ... <div class="container my-2"> <h1 class="text-center">A new title!<h1> </div> <div class="container my-3"> ...
Semplice sito HTML con il titolo "Un nuovo titolo" e quattro immagini di articoli tecnologici.
Il semplice sito HTML.

Non stiamo toccando alcun JavaScript o CSS per mantenere questa modifica semplice. Ma se sei esperto di JavaScript, potresti trovare un posto su Kinsta. Verifica le abilità di programmazione di cui hai bisogno per far parte del team di Kinsta.

Fatto ciò, salva le modifiche:

 git commit -am "Added a simple title"

E inseriscili in GitHub proprio come faresti normalmente.

 git push

Se tutto è andato bene, congratulazioni! Hai appena impostato una connessione SSH tra la tua macchina e GitHub.

Gestisci più chiavi SSH per diversi account GitHub

Se hai più account GitHub, diciamo uno per i tuoi progetti personali e uno per il tuo lavoro, è difficile usare SSH per entrambi. Normalmente avresti bisogno di macchine separate per autenticarti su diversi account GitHub.

Ma questo può essere risolto facilmente configurando il file di configurazione SSH.

Entriamo in esso.

  1. Crea un'altra coppia di chiavi SSH e aggiungila al tuo altro account GitHub. Tieni presente il nome del file a cui stai assegnando la nuova chiave.
     ssh-keygen -t ed25519 -C "[email protected]"
  2. Crea il file di configurazione SSH. Il file di configurazione dice al programma ssh come dovrebbe comportarsi. Per impostazione predefinita, il file di configurazione potrebbe non esistere, quindi crealo all'interno della cartella .ssh/:
     touch ~/.ssh/config
  3. Modifica il file di configurazione SSH. Apri il file di configurazione e incolla il codice qui sotto:
     #Your day-to-day GitHub account Host github.com HostName github.com IdentityFile ~/.ssh/id_ed25519 IdentitiesOnly yes # Work account Host github-work HostName github.com IdentityFile ~/.ssh/work_key_file IdentitiesOnly yes

Ora, ogni volta che devi autenticarti tramite SSH usando il tuo account di lavoro o secondario, modifichi un po' l'indirizzo SSH del repository, da:

 [email protected]:workaccount/project.git

…a:

 [email protected]:workaccount/project.git

Sommario

Congratulazioni: hai appreso la maggior parte delle conoscenze pratiche di cui hai bisogno per connetterti a GitHub tramite SSH!

Questo tutorial ha discusso la necessità del protocollo SSH, le differenze tra chiavi pubbliche e private, come generare chiavi, aggiungerle a GitHub e persino gestire più chiavi SSH per diversi account GitHub. Tieni presente che, a meno che tu non voglia perdere l'accesso a tutto, la tua chiave privata deve rimanere tale: privata.

Con questa conoscenza, ora sei pronto per sviluppare un flusso di lavoro impeccabile con Git e GitHub. Continua a programmare!