Git en Github zijn essentiële tools voor elke developer. Ze worden veel gebruikt in bijna elk soort softwareontwikkelingsproject.

Er zijn andere Git hostingservices zoals Gitlab en Bitbucket, maar GitHub is en blijft de meest populaire keuze voor ontwikkelaars. Je kan zelfs je profiel bewerken om aantrekkelijker te lijken voor recruiters.

Je kunt Git en GitHub gebruiken om je projecten te organiseren, samen te werken met andere ontwikkelaars en – natuurlijk – bij Kinsta.

Maar omdat Git en GitHub verwante maar toch verschillende tools zijn, moet je je workflow met elk van hen constant bijwerken.

We raden aan om SSH sleutels te gebruiken voor elk van je machines. Dus in deze tutorial leer je wat ze zijn, wat hun voordelen zijn, en hoe je GitHub SSH sleutels kunt genereren en configureren.

Aan de slag!

Wat zijn SSH sleutels?

Simpel gezegd zijn SSH sleutels referenties die worden gebruikt voor het SSH (Secure Shell) protocol om veilige toegang tot externe computers via internet mogelijk te maken. Meestal vindt die authenticatie plaats in een opdrachtregelomgeving.

Dit protocol is gebaseerd op client-server-architectuur, wat betekent dat jij als gebruiker (of “client”) speciale software, een SSH client genaamd, moet gebruiken om in te loggen op een externe server en opdrachten uit te voeren. En dat is eigenlijk precies wat je doet bij authenticatie via een terminal als je verbinding wil maken met GitHub.

Git push
Git push.

Maar SSH wordt niet alleen voor GitHub gebruikt. Het wordt ook veel gebruikt bij andere platforms zoals Kinsta, Google Cloud en Amazon Webservices om een veilig kanaal te creëren voor toegang tot hun services.

Om te zien hoe SSH sleutels werken, moet je de verschillen tussen openbare en privésleutels begrijpen.

Openbare versus privésleutels

Laten we bij het begin beginnen.

Het SSL protocol maakt gebruik van een cryptografische techniek die asymmetrische codering wordt genoemd. Deze term klinkt misschien ingewikkeld, maar niets is minder waar.

Kort gezegd is asymmetrische codering een systeem dat een tweetal sleutels gebruikt, namelijk openbare en privé sleutels.

Zoals je misschien al vermoedt, kan de openbare sleutel met iedereen worden gedeeld. Het belangrijkste doel is om gegevens te coderen en het bericht om te zetten in geheime code of cijfertekst. Deze sleutel wordt meestal naar andere systemen gestuurd, bijvoorbeeld servers, om de gegevens te coderen voordat ze via internet worden verzonden.

Aan de andere kant is de privésleutel degene die je voor jezelf moet houden. Het wordt gebruikt om de versleutelde gegevens te ontsleutelen met je openbare sleutel. Zonder dit is het onmogelijk om je versleutelde informatie te decoderen.

Deze methode stelt jou en je server in staat om een veilig communicatiekanaal te creëren voor het verzenden van de informatie.

Dit is wat er op de achtergrond gebeurt als je via SSH verbinding maakt met een server:

  1. De client stuurt de openbare sleutel naar de server.
  2. De server vraagt de client om een willekeurig bericht te ondertekenen dat is versleuteld met de openbare sleutel met behulp van de privésleutel.
  3. De client ondertekent het bericht en stuurt het resultaat door naar de server.
  4. Er wordt een beveiligde verbinding tot stand gebracht tussen de client en de server.

Het is belangrijk om je privésleutels veilig te bewaren en ze onder geen beding met mensen te delen. Ze zijn letterlijk de sleutel tot alle informatie die naar jou wordt verzonden.

SSH sleutels gebruiken met GitHub

Sinds 13, augustus 2021, accepteert Github geen wachtwoordverificatie meer voor toegang via de opdrachtregel. Dit betekent dat je je nu moet authentiseren via een persoonlijk toegangstoken of een SSH sleutel moet gebruiken (wat iets handiger is).

Dit is wat er gebeurt wanneer je probeert te verifiëren met je GitHub wachtwoord via HTTP in een terminal:

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 heeft je openbare sleutel nodig om je te machtigen om al je repo’s via SSH te bewerken.

Laten we eens kijken hoe je lokaal SSH sleutels kunt genereren.

Zo genereer je lokaal SSH sleutels

Nu je een en ander snapt van het SSH protocol en de verschillen tussen openbare en privésleutels, is het tijd om dit veilige SSH kanaal in te stellen tussen je machine en je GitHub repo’s.

Voordat we verder gaan: je zou al een Github account moeten hebben en een terminal/opdrachtprompt met Git op je systeem geïnstalleerd. Als je Windows gebruikt, zorg er dan voor dat je Git bash hebt geïnstalleerd. Alle tools die je nodig hebt in deze tutorial, zijn ingebouwd.

De OpenSSH client is de meest populaire open-sourcesoftware die wordt gebruikt om verbinding te maken via SSH. Je hoeft je geen zorgen te maken over je besturingssysteem omdat het standaard is geïnstalleerd op Linux, macOS en Windows 10.

Je moet een opdrachtprompt starten op Windows of een terminal op Unix gebaseerde systemen om lokale SSH sleutels te genereren. Meestal kun je dit doen door te zoeken naar “terminal”, “cmd” of “powershell” binnen je toepassingspaneel en vervolgens op het pictogram te klikken dat verschijnt.

Terminal-applicatie zoeken.
Terminal-applicatie zoeken.

Nadat je dit hebt gedaan, zou je een venster moeten hebben dat lijkt op de volgende afbeelding.

Terminaltoepassing
Terminaltoepassing

Voer de volgende opdracht uit om een lokaal SSH sleutelpaar te genereren:

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

Het is tijd om je een geheim te vertellen: niemand kan dit commando onthouden! De meeste ontwikkelaars moeten het elke keer googlen omdat:

  1. Het is een heel lang commando, met makkelijk te vergeten, willekeurig ogende getallen.
  2. We gebruiken het zelden, dus het is het vaak niet waard om dit te onthouden.

Het is echter belangrijk om elk commando dat we in onze terminals introduceren te begrijpen, dus laten we eens kijken wat elk deel hiervan betekent.

  • ssh-keygen: De opdrachtregeltool die wordt gebruikt voor het maken van een nieuw paar SSH sleutels. Je kunt de flags zien met ssh-keygen help
  • -t ed25519: De flag -t wordt gebruikt om het algoritme aan te geven dat wordt gebruikt om de digitale handtekening van het sleutelpaar te maken. Als je systeem dit ondersteunt, is ed25519 het beste algoritme dat je kunt gebruiken om SSH sleutelparen te maken.
  • -C “email”: de vlag -C wordt gebruikt om een custom comment te geven aan het einde van de openbare sleutel, meestal de e-mail of identificatie van de maker van het sleutelpaar.

Nadat je het commando in je terminal hebt getypt, moet je het bestand invoeren waarin je de sleutels wilt opslaan. Standaard bevindt het zich in je thuismap, in een verborgen map met de naam “.ssh”, maar je kunt het wijzigen in wat je maar wilt.

Vervolgens word je om een wachtwoordzin gevraagd om aan je sleutelpaar toe te voegen. Dit voegt een extra beveiligingslaag toe als je apparaat op enig moment wordt gecompromitteerd. Het is niet verplicht om een wachtwoordzin toe te voegen, maar het wordt altijd aanbevolen.

Zo ziet het hele proces eruit:

ssh-keygen commando.
ssh-keygen commando.

Zoals je kunt zien, genereert deze opdracht twee bestanden in de map die je hebt geselecteerd (meestal ~/.ssh): de openbare sleutel met de extensie .pub en de privésleutel zonder extensie.

We laten je later zien hoe je de openbare sleutel aan je GitHub account kunt toevoegen.

SSH sleutel toevoegen aan ssh-agent

Het ssh-agent programma draait op de achtergrond, houdt je privésleutels en wachtwoordzinnen veilig vast en houdt ze klaar voor gebruik door ssh. Het is een geweldig hulpprogramma dat ervoor zorgt dat je niet elke keer je wachtwoordzin hoeft te typen als je verbinding wilt maken met een server.

Daarom wil je je nieuwe privésleutel aan deze agent toevoegen. Dit is hoe je het doet:

  1. Zorg ervoor dat ssh-agent op de achtergrond draait.
    eval `ssh-agent`
    # Agent pid 334065

    Als je een bericht als deze krijgt, dan is alles in orde. Het betekent dat de ssh-agent onder een bepaald proces-ID (PID) draait.

  2. Voeg je SSH privésleutel (die zonder extensie) toe aan de ssh-agent.
    ssh-add ~/.ssh/kinsta_keys

    Vervang kinsta_keys door de naam van je SSH sleutel. Als dit de eerste sleutel is die je hebt gemaakt, moet deze de naam ‘id_gebruikte_algoritme’ hebben, bijvoorbeeld id_ed25519.

SSH sleutel toevoegen aan GitHub account

De laatste stap is om je openbare sleutel toe te voegen aan je GitHub account. Volg deze instructies:

  1. Kopieer je openbare SSH sleutel naar je klembord. Je kunt het bestand openen waar het zich bevindt met een teksteditor en het kopiëren, of de terminal gebruiken om de inhoud ervan weer te geven.
    cat ~/.ssh/kinsta_keys.pub
    # ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJl3dIeudNqd0DPMRD6OIh65tjkxFNOtwGcWB2gCgPhk [email protected]
  2. Log in op GitHub en ga naar het gedeelte rechtsboven op de pagina, klik in je profielfoto en selecteer Settings

    GitHub Settings.
    GitHub Settings.

  3. Klik vervolgens in het profiel van je instellingen op SSH and GPG keys.

    SSH and GPG keys.
    SSH and GPG keys.

  4. Klik op de knop New SSH key.

    Knop New SSH key.
    Knop New SSH key.

  5. Geef je nieuwe SSH sleutel op GitHub een titel – meestal het apparaat waarvandaan je die sleutel gaat gebruiken. En plak de sleutel vervolgens in het gebied Key.

    Formulier toevoegen nieuwe SSH sleutel.
    Formulier toevoegen nieuwe SSH sleutel.

  6. Je SSH sleutel toevoegen

    Knop Add SSH key.
    Knop Add SSH key.

SSH verbinding testen met een Repo Push

Het is tijd om alles te testen wat je tot nu toe hebt gedaan. Je gaat met SSH een van je bestaande repo’s wijzigen, committen en ernaar pushen om ervoor te zorgen dat je verbinding correct is ingesteld.

Voor ons voorbeeld zullen we de eenvoudige HTML site wijzigen die we hebben gemaakt in onze Git voor webdevelopment tutorial.

Eerst moeten we de repository naar onze lokale machine klonen. We kunnen naar de repo-pagina op GitHub gaan en het SSH-adres kopiëren dat het ons geeft.

SSH kloonopdracht.
SSH kloonopdracht.

Kloon vervolgens de repo met een terminal:

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

Laten we nu een simpele <h1> tag toevoegen in het bestand index.html:

...
<div class="container my-2">
    <h1 class="text-center">A new title!<h1>
</div>

<div class="container my-3">
...
De simpele HTML site.
De simpele HTML site.

We gebruiken geen JavaScript of CSS om deze bewerking eenvoudig te houden. Maar als je goed bent met JavaScript, hebben we misschien een plekje voor je bij Kinsta. Check de codeervaardigheden die je nodig hebt om deel uit te maken van het Kinsta team.

Nadat je dit hebt gedaan, moet je de wijzigingen committen:

git commit -am "Added a simple title"

En push ze naar GitHub, net zoals je normaal zou doen.

git push

Als alles goed is gegaan, gefeliciteerd! Je hebt net een SSH verbinding opgesteld tussen je machine en GitHub.com

Meerdere SSH sleutels beheren voor verschillende GitHub accounts

Als je meerdere GitHub accounts hebt — laten we zeggen één voor je persoonlijke projecten en één voor je werk — is het moeilijk om SSH voor beide te gebruiken. Normaal gesproken heb je aparte machines nodig om je te verifiëren bij verschillende GitHub accounts.

Maar dit kan eenvoudig worden opgelost door het SSH configuratiebestand te configureren.

Laten we eens gaan kijken.

  1. Maak nog een SSH sleutelpaar en voeg het toe aan je andere GitHub account. Houd rekening met de naam van het bestand waaraan je de nieuwe sleutel toewijst.
    ssh-keygen -t ed25519 -C "[email protected]"
  2. Maak het SSH configuratiebestand. Het configuratiebestand vertelt het ssh programma hoe het zich moet gedragen. Standaard bestaat het configuratiebestand mogelijk niet, dus maak het aan in de .ssh/-map:
    touch ~/.ssh/config
  3. Wijzig het SSH configuratiebestand. Open het configuratiebestand en plak de onderstaande code:
    #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

Elke keer dat je je nu via SSH moet authentiseren met je werk- of secundaire account, pas je het repo SSH adres een beetje aan, van:

[email protected]:workaccount/project.git

…naar:

git@github-work:workaccount/project.git

Samenvatting

Gefeliciteerd – je hebt de meeste praktische kennis geleerd die je nodig hebt om via SSH verbinding te maken met GitHub!

Deze tutorial besprak de noodzaak van het SSH protocol, de verschillen tussen openbare en privésleutels, hoe sleutels te genereren, toe te voegen aan GitHub en zelfs meerdere SSH sleutels voor verschillende GitHub accounts te beheren. Houd er rekening mee dat, tenzij je de volledige toegang wilt verliezen, je privésleutel privé moet blijven.

Met deze kennis ben je nu klaar om een vlekkeloze workflow te ontwikkelen met Git en Github. Succes met coderen!

Daniel Diaz

Daniel is a self-taught Python Developer, Technical Writer, and long-life learner. He enjoys creating software from scratch and explaining this process through stunning articles. Follow him on Twitter: @DaniDiazTech