Å sjekke ut kode fra GitHub kan gjøres via HTTPS eller SSH. For å sjekke ut via SSH trenger vi en SSH-nøkkel.
GitHub sin dokumentasjon sier at vi kan opprette en SSH-nøkkel slik:
ssh-keygen -t ed25519 -C "your_email@example.com"
Dette oppretter en private key ~/.ssh/id_ed25519 og en public key ~/.ssh/id_ed25519.pub
Jeg hadde fått meg ny maskin og trengte å sette opp dette på nytt.
Skulle jeg kopiere SSH-nøkkel fra gammel til ny maskin og fortsette å bruke den?
Eller skulle jeg lage en ny? Det er det delte meninger om.
Men jeg hadde også sett at passordprogrammet mitt, 1Password, har støtte for SSH-nøkler. Ikke bare støtte for å lagre nøklene, men også å generere og bruke de.
Så jeg ville sjekke om det var et bra alternativ.
¶Generere SSH-nøkkel med 1Password
I 1Password kan vi enkelt generere en SSH-nøkkel ved å velge New Item og SSH Key:

Da får vi valget om å generere en ny nøkkel eller importere en eksisterende:

Vi velger å opprrette en ny nøkkel av typen ed25519:

Vi trykker på Generate og Save og dermed har vi opprettet en SSH-nøkkel.
¶SSH Agent
For å bruke denne nøkkelen trenger vi en SSH-agent som kan servere den ved behov.
1Password har innebygget SSH-agent som den tilbyr oss hjelp til å sette opp:

Vi trykker Open Developer Settings… og Set up the SSH Agent:
Da får vi først spørsmål om 1Password kan opprette en fil for å kunne vise oss navn på nøklene istedenfor bare fingerprints:

Det er kjekt, så vi svarer Use Key Names.
1Password foreslår hva vi må legge til i ~/.ssh/config. Denne filen har vi ikke fra før. Vi velger Edit Automatically og 1Password oppretter den for oss.

Dermed er SSH-agenten oppe og kjører:

¶Nøkler på GitHub
GitHub trenger å vite om SSH-nøkkelen vi har generert. Vi går til github.com og velger Settings og SSH and GPG keys:

Der velger vi New SSH key. 1Password sin browserplugin vil la deg velge SSH-nøkkelen vi har opprettet, hvis ikke kan du klippe og lime fra 1Password.
Key type skal være Authentication Key

Vi trykker Add SSH key og vi er klar til å sjekke ut kode fra GitHub. Vi går til terminalen og skriver:
git clone git@github.com:rlovtangen/ssh-1password.git
Da ber 1Passord oss om lov til å bruke SSH-nøkkelen:

Vi lar den få lov til det, og kloningen fullføres 🎉

¶Commit signing
Commit signing gir et ekstra bevis på at det er du som faktisk står bak committen.
Dette har vært litt omstendelig å sette opp med GPG-nøkler.
Men GitHub har nå støtte for commit signing også med SSH-nøkler, og med 1Password på laget blir det hele en lek.
1Password foreslår å bruke SSH-nøkkelen vår til commit signing:
Vi velger Configure… og får forslag til hva som må legges til i ~/.gitconfig:
Vi velger Edit Automatically og 1Password fletter inn innholdet på rett sted, siden vi allerede har denne filen fordi vi har satt user.name og user.email.
Så må vi fortelle GitHub hvilken SSH-nøkkel som skal brukes til commit signing:
Vi legger til nøkkelen på samme måte som sist, men denne gangen velger vi Signing Key som Key type.
Nå kan vi gjøre en commit og pushe til GitHub. GitHub viser da committen som verified 🎉.
¶Oppsummering
Jeg har kjørt dette oppsettet i snart to år, og synes det fungerer utmerket. Jeg føler meg litt sikrere på at SSH-nøkkelen min ikke kommer på avveie når jeg vet at den aldri forlater passordprogrammet mitt. Jeg trenger heller ikke være redd for å miste den. Når det i tillegg er så enkelt å sette opp, så ser jeg ingen grunn til å ikke gjøre det.
1Password er forøvrig ikke alene om å ha innebygd SSH-agent, det har bl.a. også Bitwarden og Keeper. Sjekk ditt favorittpassordprogram, kanskje er støtten allerede tilstede.
