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
