Git

Vil bare logge at Github krever autentisering hvis du skal klone private prosjekter, og det kan løses med SSH-nøkler, men hvis du har flere kontoer krever Github at hver konto har sin egen nøkkel, og den private delen av nøkkelen må registreres lokalt på PCen, så hvis du har flere må de skilles fra hverandre i en egen config-fil. Så når du kloner ned må du spesifisere aliaset fra configen.

Lage nøkkel

Du lager et privat/public RSA-nøkkelpar (to filer) i Administrator: Powershell. De skal ligge i mappa .ssh, som skal ligge rett på useren din i Windows:

> cd C:\Users\ingri\.ssh
> ssh-keygen -t rsa -b 4096 -C "din@epostadresse.com"

Du blir bedt om å gi nøkkelen et navn; den private fila blir da stående uten extension: navn og den public med: navn.pub.

Enable SSH-agenten

Sjekk at SSH-agenten er enablet (hos meg var den ikke). Du bruker den til å registrere den private nøkkelen lokalt på PCen:

> Get-Service ssh-agent | Select-Object -Property StartType

Hvis det kommer opp at den er disablet, kjør:

> Set-Service -Name ssh-agent -StartupType Automatic

Registrere privat nøkkel

Du kan nå legge til den private nøkkelen:

> ssh-add ~\.ssh\navn

Kopiere public nøkkel

Hvis det funket skal du nå kopiere innholdet i den public-e nøkkelen:

> Get-Content ~\.ssh\ingridskard.pub

Kopier hele outputten, den starter med ssh-rsa og slutter med epostadressen du oppga.

Legge til public nøkkel på Github

Gå til Github-kontoen din, Settings, SSH And GPG Keys. Opprett ny SSH-nøkkel, type “Authentication Key”, lim inn outputten og lagre.

Lokal konfig ved flere nøkler

Dette vil nå funke ut av boksen hvis du holder på med bare én Github-konto. Men hvis på flere kontoer kan SSH-nøklene snuble i hverandre lokalt. Da kan du opprette en fil config i .ssh-mappa der du aliaser nøklene, så systemet klare å holde dem fra hverandre:

# Default GitHub account (ingridskard)
Host github.com-ingridskard
  HostName github.com
  User git
  IdentityFile ~/.ssh/ingridskard
  IdentitiesOnly yes

# Another GitHub account
Host github.com-shinysticker
  HostName github.com
  User git
  IdentityFile ~/.ssh/shinysticker
  IdentitiesOnly yes

Bruk av alias ved kloning

Når du kloner repo da må du bruke aliaset:

$ git clone git@github.com-ingridskard:ingridskard/ever-ip.git

Det som skjer nå er at Git sender med public-nøkkelen når du prøver å klone, og hvis systemet klarer å finne referanse til riktig privat-nøkkel i konfigen og den matcher, får du fortsette. Hvis nøklene ikke matcher får du feilmelding:

git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Hvis det ikke er satt opp noen nøkkel eller systemet ikke finner den, får du feilmelding om at repoet ikke fins.

Første gang systemet autentiserer med ny nøkkel spør git:

The authenticity of host 'github.com (140.82.121.4)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? 

Her skal du bare svare ja.

Strafferunde: Få VS Code til å lese aliasene

Du må sette aliaset på remote-url i repoet ditt for at VS Code skal klare å lese det. Du kan se hva VS Code leser nå med

> git remote -v

Hvis den urlen uten alias (typ git@github.com:ingridskard/repoet-ditt.git) kan du oppdatere den med:

> git remote set-url origin git@github.com-ingridskard:ingridskard/repoet-ditt.git