{"id":70,"date":"2026-06-13T16:59:32","date_gmt":"2026-06-13T16:59:32","guid":{"rendered":"https:\/\/shattered.io\/no\/2026\/06\/13\/ssh-nokkel-linux\/"},"modified":"2026-06-13T20:45:59","modified_gmt":"2026-06-13T20:45:59","slug":"ssh-nokkel-linux","status":"publish","type":"post","link":"https:\/\/shattered.io\/no\/2026\/06\/13\/ssh-nokkel-linux\/","title":{"rendered":"SSH-n\u00f8kkel i Linux: sikker innlogging i 10 steg [2026]"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Passord lekker, gjettes og gjenbrukes. En <strong>SSH-n\u00f8kkel<\/strong> gj\u00f8r ingen av delene. N\u00e5r du logger inn med n\u00f8kkel, forlater den hemmelige delen aldri maskinen din, og serveren slipper \u00e5 lagre noe den kan miste. Denne veiledningen tar deg gjennom hele oppsettet i ti konkrete steg, fra du genererer din f\u00f8rste Ed25519-n\u00f8kkel til du har stengt passordinnlogging helt p\u00e5 serveren. Du trenger rundt 30 minutter og en server du har tilgang til.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Alt under er testet p\u00e5 Ubuntu og fungerer likt p\u00e5 Debian, Fedora og de fleste Linux-distribusjoner. Vi dekker ogs\u00e5 macOS og Windows, slik at samme n\u00f8kkelpar fungerer uansett hvor du sitter. Hvert steg har faktiske kommandoer, eksempler p\u00e5 utdata du b\u00f8r se, og en feils\u00f8kingsdel for n\u00e5r noe ikke stemmer.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"hva-er-en-ssh-nokkel-og-hvorfor-slar-den-passordet\">Hva er en SSH-n\u00f8kkel, og hvorfor sl\u00e5r den passordet<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En SSH-n\u00f8kkel er et par av matematisk koblede filer: en privat n\u00f8kkel som blir p\u00e5 din maskin, og en offentlig n\u00f8kkel du legger p\u00e5 serveren. Den private n\u00f8kkelen er en hemmelighet bare du har. Den offentlige kan deles fritt, akkurat som adressen din. N\u00e5r du kobler til, sender serveren en utfordring. Klienten din signerer utfordringen med den private n\u00f8kkelen, og serveren verifiserer signaturen med din offentlige n\u00f8kkel. Den private n\u00f8kkelen sendes aldri over nettverket. Dette er en <a href=\"\/no\/digitale-signaturer\/\">digital signatur<\/a> i praksis, og det er grunnen til at avlytting ikke hjelper en angriper.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Forskjellen fra passord er fundamental. Et passord p\u00e5 12 tegn kan brute-forces, fanges av en keylogger eller fiskes ut via phishing. En Ed25519-n\u00f8kkel gir rundt 128 bits sikkerhet, som ingen klarer \u00e5 gjette seg gjennom. Fordi serveren bare lagrer den offentlige n\u00f8kkelen, gir en lekkasje av serverens filer ingen angriper noe de kan logge inn med. Selv om noen kopierer den offentlige n\u00f8kkelen din, kan de ikke regne seg tilbake til den private.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">SSH bygger p\u00e5 asymmetrisk kryptografi, den samme familien som beskytter <a href=\"\/no\/https-og-tls\/\">HTTPS og TLS<\/a>. Ed25519 bruker Curve25519, en elliptisk kurve som gir h\u00f8y sikkerhet med sv\u00e6rt sm\u00e5 n\u00f8kler. En privat Ed25519-n\u00f8kkel er bare 256 bit, mens en RSA-n\u00f8kkel med tilsvarende styrke krever tusenvis av bit. Mindre n\u00f8kler betyr raskere signering, raskere verifisering og kortere offentlige n\u00f8kler som er enklere \u00e5 h\u00e5ndtere.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00f8kkelinnlogging er ogs\u00e5 grunnmuren for automatisering. Skript, sikkerhetskopier, distribusjon og verkt\u00f8y som Ansible eller rsync logger inn uten \u00e5 skrive passord. N\u00e5r du f\u00f8rst har satt opp n\u00f8kler riktig, blir alt dette tryggere og enklere p\u00e5 samme tid. Det er sjelden en avveiing mellom sikkerhet og bekvemmelighet er s\u00e5 ensidig i din fav\u00f8r.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"forutsetninger-dette-trenger-du-for-du-starter\">Forutsetninger: dette trenger du f\u00f8r du starter<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Du trenger lite for \u00e5 komme i gang, men versjonene betyr noe. OpenSSH har endret seg mye de siste \u00e5rene, og enkelte funksjoner i denne veiledningen krever nyere klienter. Sjekk hva du har f\u00f8r du g\u00e5r videre.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>En lokal maskin<\/strong> med Linux, macOS eller Windows 10\/11. OpenSSH-klienten f\u00f8lger med alle tre.<\/li>\n<li><strong>OpenSSH 8.2 eller nyere<\/strong> hvis du vil bruke maskinvaren\u00f8kler (FIDO2). OpenSSH 9.x og 10 anbefales for post-kvante n\u00f8kkelutveksling.<\/li>\n<li><strong>En server<\/strong> du har konto p\u00e5, med SSH-tjenesten aktiv. Ubuntu 22.04 LTS eller 24.04 LTS fungerer rett ut av boksen.<\/li>\n<li><strong>Et brukernavn og en eksisterende innloggingsmetode<\/strong> (passord eller eksisterende n\u00f8kkel) for det f\u00f8rste oppsettet.<\/li>\n<li><strong>Administratortilgang (sudo)<\/strong> p\u00e5 serveren hvis du skal herde <code>sshd_config<\/code> i de siste stegene.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Bekreft OpenSSH-versjonen din med kommandoen under. Tallet etter \u00abOpenSSH_\u00bb er det som teller. Er det 8.2 eller h\u00f8yere, er du klar for alt i denne veiledningen.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ ssh -V\nOpenSSH_9.6p1 Ubuntu-3ubuntu13.5, OpenSSL 3.0.13 30 Jan 2024<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ser du ikke noe svar p\u00e5 Windows, mangler OpenSSH-klienten. Den installeres under Innstillinger, Apper, Valgfrie funksjoner, OpenSSH-klient. P\u00e5 Linux installerer du den med <code>sudo apt install openssh-client<\/code>, og serverdelen med <code>sudo apt install openssh-server<\/code>. Etter det er du klar for steg 1.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-1-sjekk-om-du-allerede-har-ssh-nokler\">Steg 1: Sjekk om du allerede har SSH-n\u00f8kler<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Mange har allerede et n\u00f8kkelpar uten \u00e5 vite det, fordi verkt\u00f8y som GitHub Desktop eller en tidligere installasjon kan ha laget ett. Du vil ikke overskrive en n\u00f8kkel som er i bruk andre steder, s\u00e5 start med \u00e5 se etter eksisterende filer. Alle n\u00f8kler ligger i mappen <code>~\/.ssh<\/code> i hjemmekatalogen din.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ ls -la ~\/.ssh\ntotal 28\ndrwx------  2 sam sam 4096 jun 13 09:14 .\ndrwxr-xr-x 45 sam sam 4096 jun 13 09:10 ..\n-rw-------  1 sam sam  411 jun 13 09:14 id_ed25519\n-rw-r--r--  1 sam sam   96 jun 13 09:14 id_ed25519.pub\n-rw-r--r--  1 sam sam  142 jun 13 09:12 known_hosts<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ser du filer som <code>id_ed25519<\/code>, <code>id_rsa<\/code> eller <code>id_ecdsa<\/code> sammen med en <code>.pub<\/code>-versjon, har du allerede et n\u00f8kkelpar. Filer uten <code>.pub<\/code> er private og skal aldri deles. Den med <code>.pub<\/code> er den offentlige. F\u00e5r du \u00abNo such file or directory\u00bb, finnes ikke mappen enn\u00e5, og du har ingen n\u00f8kler. Begge deler er helt greit.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vil du gjenbruke en eksisterende Ed25519-n\u00f8kkel, kan du hoppe rett til steg 4. Har du bare en gammel RSA- eller ECDSA-n\u00f8kkel, anbefaler vi at du lager en ny Ed25519-n\u00f8kkel uansett. Det tar et halvt minutt, og du f\u00e5r en moderne og raskere n\u00f8kkel. Du kan beholde begge samtidig, fordi SSH pr\u00f8ver flere n\u00f8kler automatisk.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Finnes ikke mappen, lager du den med riktige rettigheter med en gang. Mappen skal kun v\u00e6re tilgjengelig for deg, ellers nekter OpenSSH \u00e5 bruke n\u00f8klene av sikkerhetshensyn.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ mkdir -p ~\/.ssh\n$ chmod 700 ~\/.ssh<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-2-generer-en-ed25519-nokkel-med-ssh-keygen\">Steg 2: Generer en Ed25519-n\u00f8kkel med ssh-keygen<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e5 lager du selve n\u00f8kkelparet. Kommandoen <code>ssh-keygen<\/code> f\u00f8lger med OpenSSH og gj\u00f8r alt. Vi bruker Ed25519, som er det anbefalte valget for nye n\u00f8kler. Flagget <code>-a 100<\/code> setter antall runder i n\u00f8kkelderiveringsfunksjonen som beskytter den private n\u00f8kkelen p\u00e5 disk, og <code>-C<\/code> legger til en kommentar som hjelper deg \u00e5 kjenne igjen n\u00f8kkelen senere.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ ssh-keygen -t ed25519 -a 100 -C \"sam@laptop-2026\"\nGenerating public\/private ed25519 key pair.\nEnter file in which to save the key (\/home\/sam\/.ssh\/id_ed25519):\nEnter passphrase (empty for no passphrase):\nEnter same passphrase again:\nYour identification has been saved in \/home\/sam\/.ssh\/id_ed25519\nYour public key has been saved in \/home\/sam\/.ssh\/id_ed25519.pub\nThe key fingerprint is:\nSHA256:8Xq2pV0p9k3mB7nLwR4tY1cZsD6fH8jK2mN4oP6qR8s sam@laptop-2026<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Trykk Enter p\u00e5 det f\u00f8rste sp\u00f8rsm\u00e5let for \u00e5 godta standardplasseringen <code>~\/.ssh\/id_ed25519<\/code>. P\u00e5 sp\u00f8rsm\u00e5let om passordfrase b\u00f8r du skrive inn en god frase. Dette er viktig: passordfrasen krypterer den private n\u00f8kkelen p\u00e5 disk, slik at en stj\u00e5let laptop ikke gir noen tilgang til serverne dine. Du slipper \u00e5 skrive den hver gang n\u00e5r du senere setter opp <code>ssh-agent<\/code> i steg 6.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Trenger du en RSA-n\u00f8kkel for et eldre system som ikke st\u00f8tter Ed25519, bruker du denne varianten i stedet. Bruk minst 4096 bit. Aldri lavere enn 3072.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ ssh-keygen -t rsa -b 4096 -a 100 -C \"sam@laptop-2026-rsa\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Fingeravtrykket (SHA256-strengen) er en kort identifikator for n\u00f8kkelen, avledet med en <a href=\"\/no\/sha-256\/\">SHA-256<\/a>-hash av den offentlige n\u00f8kkelen. Du bruker det til \u00e5 bekrefte at du faktisk snakker med riktig n\u00f8kkel n\u00e5r du legger den p\u00e5 en server eller deler den med en kollega. Tabellen under forklarer de viktigste flaggene til <code>ssh-keygen<\/code>.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Flagg<\/th><th>Hva det gj\u00f8r<\/th><th>Anbefalt verdi<\/th><\/tr><\/thead><tbody><tr><td><code>-t<\/code><\/td><td>Velger n\u00f8kkeltype (algoritme)<\/td><td><code>ed25519<\/code><\/td><\/tr><tr><td><code>-b<\/code><\/td><td>Antall bit (kun relevant for RSA)<\/td><td><code>4096<\/code> for RSA<\/td><\/tr><tr><td><code>-a<\/code><\/td><td>Runder i KDF som beskytter privatn\u00f8kkelen<\/td><td><code>100<\/code><\/td><\/tr><tr><td><code>-C<\/code><\/td><td>Kommentar for \u00e5 identifisere n\u00f8kkelen<\/td><td>e-post eller maskinnavn<\/td><\/tr><tr><td><code>-f<\/code><\/td><td>Filsti for n\u00f8kkelen<\/td><td>standard, eller egendefinert navn<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-3-forsta-nokkelfilene-og-sett-riktige-rettigheter\">Steg 3: Forst\u00e5 n\u00f8kkelfilene og sett riktige rettigheter<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Etter generering har du to filer. Den private n\u00f8kkelen heter <code>id_ed25519<\/code> uten filendelse, og den offentlige heter <code>id_ed25519.pub<\/code>. Den private er hemmeligheten din og m\u00e5 aldri kopieres til en server, sendes p\u00e5 e-post eller lastes opp noe sted. Den offentlige kan du dele fritt. Se p\u00e5 innholdet i den offentlige n\u00f8kkelen med <code>cat<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ cat ~\/.ssh\/id_ed25519.pub\nssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH8k2pV0p9k3mB7nLwR4tY1cZsD6fH8jK2mN4oP6qR8s sam@laptop-2026<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Linjen har tre deler: algoritmen (<code>ssh-ed25519<\/code>), selve n\u00f8kkelen i base64, og kommentaren din til slutt. Det er nettopp denne linjen du skal legge p\u00e5 serveren i neste steg. Den private n\u00f8kkelen ser du helst ikke p\u00e5, men den begynner med <code>-----BEGIN OPENSSH PRIVATE KEY-----<\/code> og er kryptert hvis du satte en passordfrase.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Rettighetene m\u00e5 v\u00e6re strenge, ellers nekter OpenSSH \u00e5 bruke n\u00f8klene. Dette er en av de vanligste feilkildene. Den private n\u00f8kkelen skal bare v\u00e6re lesbar for deg (<code>600<\/code>), og selve mappen skal v\u00e6re <code>700<\/code>. Sett dem eksplisitt for \u00e5 v\u00e6re sikker.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ chmod 700 ~\/.ssh\n$ chmod 600 ~\/.ssh\/id_ed25519\n$ chmod 644 ~\/.ssh\/id_ed25519.pub\n$ ls -l ~\/.ssh\/id_ed25519\n-rw------- 1 sam sam 411 jun 13 09:14 \/home\/sam\/.ssh\/id_ed25519<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00e5r du senere meldingen \u00abUNPROTECTED PRIVATE KEY FILE!\u00bb n\u00e5r du logger inn, er det fordi rettighetene er for \u00e5pne. Da kj\u00f8rer du <code>chmod 600<\/code> p\u00e5 den private n\u00f8kkelen igjen. Den samme regelen gjelder p\u00e5 serveren: mappen <code>~\/.ssh<\/code> og filen <code>authorized_keys<\/code> der m\u00e5 ogs\u00e5 ha riktige rettigheter, noe vi kommer tilbake til i feils\u00f8kingsdelen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-4-kopier-den-offentlige-nokkelen-til-serveren\">Steg 4: Kopier den offentlige n\u00f8kkelen til serveren<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e5 skal den offentlige n\u00f8kkelen din inn i filen <code>~\/.ssh\/authorized_keys<\/code> p\u00e5 serveren. Enhver n\u00f8kkel som st\u00e5r oppf\u00f8rt der, f\u00e5r logge inn som den brukeren. Den enkleste m\u00e5ten er verkt\u00f8yet <code>ssh-copy-id<\/code>, som gj\u00f8r alt riktig for deg, inkludert rettigheter. Erstatt brukernavn og serveradresse med dine egne.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ ssh-copy-id -i ~\/.ssh\/id_ed25519.pub sam@192.0.2.50\n\/usr\/bin\/ssh-copy-id: INFO: Source of key(s) to be installed: \"\/home\/sam\/.ssh\/id_ed25519.pub\"\n\/usr\/bin\/ssh-copy-id: INFO: attempting to log in with the new key(s)\nsam@192.0.2.50's password:\n\nNumber of key(s) added: 1\n\nNow try logging into the machine, with:   \"ssh 'sam@192.0.2.50'\"\nand check to make sure that only the key(s) you wanted were added.<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Du skriver inn serverpassordet ditt denne ene gangen. Etterp\u00e5 er n\u00f8kkelen p\u00e5 plass, og du trenger aldri passordet igjen. Har du ikke <code>ssh-copy-id<\/code> (det mangler p\u00e5 Windows og enkelte minimale systemer), kan du gj\u00f8re det samme manuelt med en enkelt kommando. Den legger n\u00f8kkelen til uten \u00e5 overskrive eksisterende n\u00f8kler.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ cat ~\/.ssh\/id_ed25519.pub | ssh sam@192.0.2.50 \\\n  \"mkdir -p ~\/.ssh && chmod 700 ~\/.ssh && cat >> ~\/.ssh\/authorized_keys && chmod 600 ~\/.ssh\/authorized_keys\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">P\u00e5 Windows med PowerShell ser den manuelle varianten litt annerledes ut, fordi <code>cat<\/code> heter <code>type<\/code> der. Bruk denne i stedet hvis du sitter p\u00e5 Windows uten <code>ssh-copy-id<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>PS&gt; type $env:USERPROFILE\\.ssh\\id_ed25519.pub | ssh sam@192.0.2.50 \"cat &gt;&gt; .ssh\/authorized_keys\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Verifiser at n\u00f8kkelen havnet riktig sted ved \u00e5 logge inn og se p\u00e5 filen. Du skal se n\u00f8yaktig den samme linjen som <code>cat ~\/.ssh\/id_ed25519.pub<\/code> ga deg lokalt. St\u00e5r den der, er du klar til \u00e5 teste innloggingen i neste steg.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-5-logg-inn-med-nokkel-og-bekreft-at-det-virker\">Steg 5: Logg inn med n\u00f8kkel og bekreft at det virker<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Test innloggingen. Hvis alt stemmer, skal du komme rett inn uten \u00e5 bli spurt om serverpassordet. Blir du spurt om passordfrasen til n\u00f8kkelen, er det bra, det betyr at n\u00f8kkelen brukes. Det er passordfrasen til den private n\u00f8kkelen, ikke serverpassordet.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ ssh sam@192.0.2.50\nEnter passphrase for key '\/home\/sam\/.ssh\/id_ed25519':\nWelcome to Ubuntu 24.04.1 LTS (GNU\/Linux 6.8.0-41-generic x86_64)\nLast login: Fri Jun 13 09:02:11 2026 from 192.0.2.10\nsam@server:~$<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Vil du se n\u00f8yaktig hva som skjer, kj\u00f8r med <code>-v<\/code> for detaljert utdata. Dette er uvurderlig for feils\u00f8king. Du leter etter linjer som \u00abOffering public key\u00bb og \u00abServer accepts key\u00bb, som bekrefter at n\u00f8kkelen ble tilbudt og godtatt.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ ssh -v sam@192.0.2.50 2&gt;&amp;1 | grep -i \"key\\|auth\"\ndebug1: Offering public key: \/home\/sam\/.ssh\/id_ed25519 ED25519 SHA256:8Xq2pV0...\ndebug1: Server accepts key: \/home\/sam\/.ssh\/id_ed25519 ED25519 SHA256:8Xq2pV0...\ndebug1: Authentication succeeded (publickey).<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Kommer du fortsatt inn med passord i stedet for n\u00f8kkel, er noe galt. De vanligste \u00e5rsakene er feil rettigheter p\u00e5 <code>~\/.ssh<\/code> eller <code>authorized_keys<\/code> p\u00e5 serveren, at n\u00f8kkelen ikke havnet i riktig brukers hjemmekatalog, eller at serveren har sl\u00e5tt av <code>PubkeyAuthentication<\/code>. Feils\u00f8kingsdelen lenger ned g\u00e5r gjennom hver av disse. Ikke g\u00e5 videre til \u00e5 stenge passordinnlogging f\u00f8r n\u00f8kkelinnloggingen fungerer p\u00e5litelig.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e5r dette virker, har du oppn\u00e5dd det viktigste: en innlogging som ikke kan phishes, ikke kan gjettes og ikke lekker fra serveren. Resten av stegene gj\u00f8r hverdagen smidigere og strammer til sikkerheten ytterligere.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-6-bruk-ssh-agent-sa-du-slipper-a-skrive-passordfrasen\">Steg 6: Bruk ssh-agent s\u00e5 du slipper \u00e5 skrive passordfrasen<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En god passordfrase er bra for sikkerheten, men irriterende \u00e5 skrive hver gang. L\u00f8sningen er <code>ssh-agent<\/code>, et lite program som holder den dekrypterte n\u00f8kkelen i minnet i \u00f8kten din. Du skriver passordfrasen \u00e9n gang, og agenten h\u00e5ndterer resten. N\u00f8kkelen ligger aldri p\u00e5 disk i dekryptert form.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ eval \"$(ssh-agent -s)\"\nAgent pid 4711\n$ ssh-add ~\/.ssh\/id_ed25519\nEnter passphrase for \/home\/sam\/.ssh\/id_ed25519:\nIdentity added: \/home\/sam\/.ssh\/id_ed25519 (sam@laptop-2026)\n$ ssh-add -l\n256 SHA256:8Xq2pV0p9k3mB7nLwR4tY1cZsD6fH8jK2mN4oP6qR8s sam@laptop-2026 (ED25519)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Etter dette logger du inn uten \u00e5 bli spurt om noe. P\u00e5 de fleste Linux-skrivebord og p\u00e5 macOS startes agenten automatisk ved innlogging. P\u00e5 macOS kan du lagre passordfrasen i n\u00f8kkelringen med <code>ssh-add --apple-use-keychain ~\/.ssh\/id_ed25519<\/code>, slik at den huskes mellom omstarter.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">P\u00e5 Windows kj\u00f8rer ssh-agent som en tjeneste. Du aktiverer den og legger til n\u00f8kkelen slik. Tjenesten starter da automatisk ved hver oppstart.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>PS&gt; Get-Service ssh-agent | Set-Service -StartupType Automatic\nPS&gt; Start-Service ssh-agent\nPS&gt; ssh-add $env:USERPROFILE\\.ssh\\id_ed25519<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Et viktig sikkerhetsr\u00e5d: v\u00e6r forsiktig med videresending av agenten (<code>ssh -A<\/code>). N\u00e5r du videresender agenten til en server, kan root p\u00e5 den serveren bruke n\u00f8klene dine til \u00e5 logge inn andre steder s\u00e5 lenge du er tilkoblet. Bruk det bare mot servere du stoler fullt p\u00e5, og vurder <code>ssh -J<\/code> (jump host) i stedet. For de fleste er det tryggest \u00e5 la videresending v\u00e6re av.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-7-sett-opp-ssh-config-for-enklere-innlogging\">Steg 7: Sett opp ~\/.ssh\/config for enklere innlogging<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c5 skrive <code>ssh sam@192.0.2.50 -p 2222 -i ~\/.ssh\/id_ed25519<\/code> hver gang er tungvint. En konfigurasjonsfil lar deg gi serveren et kallenavn og samle alle innstillinger ett sted. Opprett filen <code>~\/.ssh\/config<\/code> og legg inn en blokk per server.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ~\/.ssh\/config\nHost produksjon\n    HostName 192.0.2.50\n    User sam\n    Port 22\n    IdentityFile ~\/.ssh\/id_ed25519\n    IdentitiesOnly yes\n\nHost *.intern.example.no\n    User drift\n    IdentityFile ~\/.ssh\/id_ed25519\n    ForwardAgent no<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Etter dette logger du inn med bare <code>ssh produksjon<\/code>. Innstillingen <code>IdentitiesOnly yes<\/code> er nyttig: den tvinger SSH til \u00e5 bruke kun n\u00f8kkelen du har oppgitt, i stedet for \u00e5 pr\u00f8ve alle n\u00f8kler i agenten. Det forhindrer at du ved et uhell l\u00e5ser ut en konto fordi serveren teller for mange mislykkede fors\u00f8k.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sett rettighetene p\u00e5 config-filen til <code>600<\/code>, akkurat som for n\u00f8klene. M\u00f8nstre med jokertegn (<code>*<\/code>) gj\u00f8r at du kan sette felles innstillinger for hele domener. Rekkef\u00f8lgen teller: SSH bruker den f\u00f8rste verdien som matcher for hver innstilling, s\u00e5 legg de mest spesifikke blokkene \u00f8verst.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ chmod 600 ~\/.ssh\/config\n$ ssh produksjon\nsam@server:~$<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Config-filen er ogs\u00e5 stedet du setter opp jump hosts for \u00e5 n\u00e5 servere bak en bastion, med <code>ProxyJump bastion<\/code>. For team som forvalter mange maskiner, blir denne filen raskt det viktigste verkt\u00f8yet for \u00e5 holde orden. Den deles trygt i et internt repo s\u00e5 lenge den ikke inneholder hemmeligheter, og det gj\u00f8r den ikke: bare oppsett og filstier.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-8-herd-ssh-serveren-i-sshd_config\">Steg 8: Herd SSH-serveren i sshd_config<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e5 som n\u00f8kkelinnlogging fungerer, kan du stenge de svake metodene. Dette er det steget som faktisk hever sikkerheten p\u00e5 serveren. Rediger <code>\/etc\/ssh\/sshd_config<\/code> med sudo, og endre eller legg til linjene under. Gj\u00f8r dette mens du fortsatt har en \u00e5pen, fungerende SSH-\u00f8kt, s\u00e5 du ikke l\u00e5ser deg selv ute.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \/etc\/ssh\/sshd_config\nPubkeyAuthentication yes\nPasswordAuthentication no\nKbdInteractiveAuthentication no\nPermitRootLogin prohibit-password\nUsePAM yes\nMaxAuthTries 3\nLoginGraceTime 20<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">De viktigste linjene er <code>PasswordAuthentication no<\/code>, som sl\u00e5r av passordinnlogging helt, og <code>PermitRootLogin prohibit-password<\/code>, som tillater root bare med n\u00f8kkel (eller <code>no<\/code> for \u00e5 forby root-innlogging fullstendig). Tabellen forklarer hver direktiv. Etter endringen tester du konfigurasjonen f\u00f8r du laster den inn p\u00e5 nytt.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Direktiv<\/th><th>Anbefalt verdi<\/th><th>Effekt<\/th><\/tr><\/thead><tbody><tr><td><code>PasswordAuthentication<\/code><\/td><td><code>no<\/code><\/td><td>Stenger passordinnlogging helt<\/td><\/tr><tr><td><code>PubkeyAuthentication<\/code><\/td><td><code>yes<\/code><\/td><td>Tillater n\u00f8kkelinnlogging<\/td><\/tr><tr><td><code>PermitRootLogin<\/code><\/td><td><code>prohibit-password<\/code><\/td><td>Root bare med n\u00f8kkel, aldri passord<\/td><\/tr><tr><td><code>MaxAuthTries<\/code><\/td><td><code>3<\/code><\/td><td>Begrenser fors\u00f8k per tilkobling<\/td><\/tr><tr><td><code>LoginGraceTime<\/code><\/td><td><code>20<\/code><\/td><td>Kort vindu f\u00f8r uautentisert \u00f8kt lukkes<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>$ sudo sshd -t        # tester syntaksen, ingen utdata betyr OK\n$ sudo systemctl reload ssh\n$ # IKKE lukk den eksisterende okten. Apne et NYTT vindu og test:\n$ ssh produksjon\nsam@server:~$<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Den gylne regelen: behold den gamle \u00f8kten \u00e5pen til du har bekreftet i et nytt vindu at innlogging fortsatt fungerer. Klarer du ikke logge inn p\u00e5 nytt, kan du rette feilen i den \u00e5pne \u00f8kten. N\u00e5r den nye innloggingen fungerer, er serveren herdet, og passordbaserte angrep er fjernet som trussel. NSMs grunnprinsipper for IKT-sikkerhet anbefaler nettopp \u00e5 fjerne passordbasert fjerntilgang til fordel for n\u00f8kler eller flerfaktor.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-9-ssh-nokler-pa-macos-og-windows\">Steg 9: SSH-n\u00f8kler p\u00e5 macOS og Windows<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"macos\">macOS<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">macOS har OpenSSH innebygd, og alle kommandoene over fungerer identisk i Terminal. Det eneste tillegget verdt \u00e5 kjenne er integrasjonen med n\u00f8kkelringen. N\u00e5r du legger til n\u00f8kkelen med flagget for n\u00f8kkelring, husker macOS passordfrasen mellom omstarter, slik at du aldri trenger \u00e5 skrive den manuelt.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ ssh-keygen -t ed25519 -a 100 -C \"sam@mac-2026\"\n$ ssh-add --apple-use-keychain ~\/.ssh\/id_ed25519<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Legg til linjene <code>UseKeychain yes<\/code> og <code>AddKeysToAgent yes<\/code> under en <code>Host *<\/code>-blokk i <code>~\/.ssh\/config<\/code>, s\u00e5 lastes n\u00f8kkelen automatisk ved f\u00f8rste bruk. Da har du samme s\u00f8ml\u00f8se opplevelse som p\u00e5 Linux.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"windows-10-og-11\">Windows 10 og 11<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Windows har hatt OpenSSH innebygd siden Windows 10. Du kj\u00f8rer <code>ssh-keygen<\/code> i PowerShell eller Terminal n\u00f8yaktig som p\u00e5 Linux. N\u00f8klene havner i mappen <code>.ssh<\/code> under brukerprofilen din. Den eneste forskjellen er at ssh-agent kj\u00f8rer som en Windows-tjeneste, som vist i steg 6.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>PS&gt; ssh-keygen -t ed25519 -a 100 -C \"sam@win-2026\"\nPS&gt; Get-Service ssh-agent | Set-Service -StartupType Automatic\nPS&gt; Start-Service ssh-agent\nPS&gt; ssh-add $env:USERPROFILE\\.ssh\\id_ed25519<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">En vanlig snublestein p\u00e5 Windows er rettigheter p\u00e5 den private n\u00f8kkelfilen. Windows bruker ACL-er i stedet for Unix-rettigheter, og noen ganger arver filen for vide rettigheter. F\u00e5r du \u00abBad permissions\u00bb eller \u00abPermissions are too open\u00bb, m\u00e5 du fjerne arvede rettigheter og gi kun din egen bruker tilgang. Det gj\u00f8res enklest via Egenskaper, Sikkerhet, Avansert p\u00e5 filen, eller med <code>icacls<\/code> i PowerShell.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-10-maskinvarenokler-fido2-og-post-kvante\">Steg 10: Maskinvaren\u00f8kler (FIDO2) og post-kvante<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">For maksimal sikkerhet kan du binde SSH-n\u00f8kkelen til en fysisk sikkerhetsn\u00f8kkel som en YubiKey. Da kreves det at du har den fysiske enheten og ber\u00f8rer den for \u00e5 logge inn. Selv om noen stjeler b\u00e5de laptopen og passordfrasen, kommer de ingen vei uten den fysiske n\u00f8kkelen. OpenSSH har st\u00f8ttet dette siden versjon 8.2 gjennom n\u00f8kkeltypene <code>ed25519-sk<\/code> og <code>ecdsa-sk<\/code> (sk st\u00e5r for security key).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ ssh-keygen -t ed25519-sk -O resident -O application=ssh:sam -C \"sam@yubikey\"\nGenerating public\/private ed25519-sk key pair.\nYou may need to touch your authenticator to authorize key generation.\nEnter PIN for authenticator:\nEnter file in which to save the key (\/home\/sam\/.ssh\/id_ed25519_sk):\nYour identification has been saved in \/home\/sam\/.ssh\/id_ed25519_sk<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Flagget <code>-O resident<\/code> lagrer en referanse p\u00e5 selve n\u00f8kkelen, slik at du kan hente den ned p\u00e5 en ny maskin med <code>ssh-keygen -K<\/code>. Den private delen forlater aldri maskinvaren. Du kopierer den offentlige <code>.pub<\/code>-filen til serveren akkurat som f\u00f8r, og logger inn ved \u00e5 ber\u00f8re n\u00f8kkelen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">P\u00e5 kvantefronten har OpenSSH allerede tatt grep. Fra OpenSSH 9 ble en hybrid n\u00f8kkelutveksling (<code>sntrup761x25519-sha512<\/code>) tatt i bruk, og OpenSSH 10, som ble gitt ut i 2025, fjernet den gamle DSA-algoritmen helt og bruker en post-kvante hybrid n\u00f8kkelutveksling (<code>mlkem768x25519-sha256<\/code>) som standard. Dette gjelder selve tunnelen, ikke autentiseringsn\u00f8kkelen din, men det betyr at trafikken din allerede er beskyttet mot fremtidig kvantedekryptering. Du trenger ikke gj\u00f8re noe ekstra for \u00e5 f\u00e5 dette utover \u00e5 holde OpenSSH oppdatert. Les mer i v\u00e5r oversikt over <a href=\"\/no\/cryptography-hub\/\">kryptografi og digital tillit<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"rsa-vs-ed25519-vs-ecdsa-hvilken-nokkeltype-bor-du-velge\">RSA vs Ed25519 vs ECDSA: hvilken n\u00f8kkeltype b\u00f8r du velge<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Valget av n\u00f8kkeltype er enkelt for de fleste: bruk Ed25519. Men det finnes situasjoner der du trenger noe annet, og det er greit \u00e5 forst\u00e5 hvorfor. Tabellen oppsummerer egenskapene til hver type slik de st\u00e5r i 2026.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Type<\/th><th>Sikkerhetsniv\u00e5<\/th><th>N\u00f8kkelst\u00f8rrelse<\/th><th>Hastighet<\/th><th>Anbefaling 2026<\/th><\/tr><\/thead><tbody><tr><td>Ed25519<\/td><td>~128 bit<\/td><td>256 bit (liten)<\/td><td>Sv\u00e6rt rask<\/td><td>F\u00f8rstevalg for nye n\u00f8kler<\/td><\/tr><tr><td>RSA 4096<\/td><td>~128 bit<\/td><td>4096 bit (stor)<\/td><td>Tregere signering<\/td><td>Reserve for eldre systemer<\/td><\/tr><tr><td>RSA 3072<\/td><td>~112 bit<\/td><td>3072 bit<\/td><td>Middels<\/td><td>Minimum hvis RSA kreves<\/td><\/tr><tr><td>ECDSA<\/td><td>~128 bit<\/td><td>256 bit<\/td><td>Rask<\/td><td>Kun for kompatibilitet<\/td><\/tr><tr><td>DSA<\/td><td>For svak<\/td><td>1024 bit<\/td><td>Utdatert<\/td><td>Aldri, fjernet i OpenSSH 10<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ed25519 vinner p\u00e5 alle praktiske m\u00e5l: liten, rask og uten de implementasjonsfellene som har plaget ECDSA. ECDSA er knyttet til NIST-kurver som mange foretrekker \u00e5 unng\u00e5, og den er s\u00e5rbar for feil i tilfeldighetsgeneratoren. RSA er fortsatt trygt med 4096 bit og har bredest kompatibilitet, s\u00e5 velg den hvis du m\u00f8ter et gammelt system som ikke forst\u00e5r Ed25519. DSA er ute av bildet helt, fjernet fra OpenSSH 10 fordi 1024-bits n\u00f8kler ikke lenger gir forsvarlig sikkerhet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mozillas OpenSSH-retningslinjer og OpenSSH-prosjektets egen dokumentasjon peker begge p\u00e5 Ed25519 som standardvalget, med RSA 4096 som reserve. For en nybegynner er r\u00e5det derfor kort: lag en Ed25519-n\u00f8kkel, og bare bytt hvis et konkret system nekter \u00e5 ta imot den.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"5-vanlige-fallgruver-og-hvordan-du-unngar-dem\">5 vanlige fallgruver og hvordan du unng\u00e5r dem<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Feil rettigheter p\u00e5 filene.<\/strong> Den vanligste feilen. OpenSSH nekter \u00e5 bruke en privat n\u00f8kkel som er lesbar for andre. Sett <code>chmod 700 ~\/.ssh<\/code> og <code>chmod 600<\/code> p\u00e5 den private n\u00f8kkelen og p\u00e5 <code>authorized_keys<\/code>, b\u00e5de lokalt og p\u00e5 serveren.<\/li>\n<li><strong>Ingen passordfrase p\u00e5 n\u00f8kkelen.<\/strong> En n\u00f8kkel uten passordfrase ligger ubeskyttet p\u00e5 disk. Stjeles maskinen, stjeles tilgangen til alle serverne dine. Sett alltid en passordfrase, og bruk ssh-agent for \u00e5 slippe \u00e5 skrive den hele tiden.<\/li>\n<li><strong>\u00c5 stenge passord f\u00f8r n\u00f8kkelen virker.<\/strong> Setter du <code>PasswordAuthentication no<\/code> f\u00f8r du har bekreftet n\u00f8kkelinnlogging, kan du l\u00e5se deg selv ute. Test alltid i et nytt vindu mens den gamle \u00f8kten er \u00e5pen.<\/li>\n<li><strong>N\u00f8kkelen i feil brukers hjemmekatalog.<\/strong> <code>authorized_keys<\/code> m\u00e5 ligge i hjemmekatalogen til den brukeren du logger inn som. Legger du n\u00f8kkelen under root, men logger inn som <code>sam<\/code>, virker det ikke.<\/li>\n<li><strong>\u00c5 kopiere den private n\u00f8kkelen til serveren.<\/strong> Bare den offentlige <code>.pub<\/code>-filen skal p\u00e5 serveren. Legger du den private n\u00f8kkelen der, har du gitt bort hemmeligheten din. Kopier aldri filen uten <code>.pub<\/code>.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">De fleste problemer i SSH-oppsett kommer ned til disse fem. G\u00e5r du gjennom listen f\u00f8r du roper p\u00e5 hjelp, l\u00f8ser du som regel saken selv. Den neste delen gir deg presise kommandoer for \u00e5 diagnostisere det som m\u00e5tte gjenst\u00e5.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"feilsoking-8-problemer-og-losninger\">Feils\u00f8king: 8 problemer og l\u00f8sninger<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e5r noe ikke virker, er det nesten alltid en av disse \u00e5tte situasjonene. Start med \u00e5 kj\u00f8re <code>ssh -vvv<\/code> for \u00e5 se n\u00f8yaktig hvor det stopper. Tabellen under er en hurtigreferanse, og avsnittene utdyper de vanligste.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Feilmelding<\/th><th>Sannsynlig \u00e5rsak<\/th><th>L\u00f8sning<\/th><\/tr><\/thead><tbody><tr><td>Permission denied (publickey)<\/td><td>N\u00f8kkel ikke godtatt<\/td><td>Sjekk authorized_keys og rettigheter<\/td><\/tr><tr><td>UNPROTECTED PRIVATE KEY FILE<\/td><td>For \u00e5pne rettigheter<\/td><td><code>chmod 600<\/code> p\u00e5 privatn\u00f8kkelen<\/td><\/tr><tr><td>Connection refused<\/td><td>SSH-tjeneste nede eller feil port<\/td><td>Sjekk <code>systemctl status ssh<\/code><\/td><\/tr><tr><td>Host key verification failed<\/td><td>Serverens n\u00f8kkel endret<\/td><td>Fjern gammel linje i known_hosts<\/td><\/tr><tr><td>Too many authentication failures<\/td><td>Agenten pr\u00f8ver for mange n\u00f8kler<\/td><td>Bruk <code>IdentitiesOnly yes<\/code><\/td><\/tr><tr><td>Agent admitted failure<\/td><td>N\u00f8kkel ikke i agenten<\/td><td>Kj\u00f8r <code>ssh-add<\/code> p\u00e5 nytt<\/td><\/tr><tr><td>Could not resolve hostname<\/td><td>DNS- eller navnefeil<\/td><td>Sjekk adressen og config-filen<\/td><\/tr><tr><td>sign_and_send_pubkey error<\/td><td>Korrupt eller feil n\u00f8kkel<\/td><td>Verifiser med <code>ssh-keygen -y<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"permission-denied-publickey\">Permission denied (publickey)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Dette er den hyppigste feilen. Den betyr at serveren ikke godtok n\u00f8kkelen din. Sjekk tre ting p\u00e5 serveren: at <code>~\/.ssh<\/code> er <code>700<\/code>, at <code>~\/.ssh\/authorized_keys<\/code> er <code>600<\/code> og eid av riktig bruker, og at n\u00f8kkellinjen faktisk st\u00e5r i filen. Logg inn med passord (hvis fortsatt mulig) og kj\u00f8r kommandoene under.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ ls -ld ~\/.ssh\ndrwx------ 2 sam sam 4096 jun 13 09:14 \/home\/sam\/.ssh\n$ ls -l ~\/.ssh\/authorized_keys\n-rw------- 1 sam sam 96 jun 13 09:14 \/home\/sam\/.ssh\/authorized_keys\n$ sudo tail -n 20 \/var\/log\/auth.log | grep sshd<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Loggen <code>\/var\/log\/auth.log<\/code> (eller <code>journalctl -u ssh<\/code> p\u00e5 systemd) viser ofte den eksakte \u00e5rsaken, for eksempel \u00abAuthentication refused: bad ownership or modes for directory\u00bb. Det peker rett p\u00e5 et rettighetsproblem.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"host-key-verification-failed\">Host key verification failed<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Denne dukker opp n\u00e5r serverens vertsn\u00f8kkel har endret seg, typisk etter en ny installasjon eller en IP-gjenbruk. SSH advarer fordi det ogs\u00e5 kan bety et angrep. Er du sikker p\u00e5 at endringen er legitim, fjerner du den gamle oppf\u00f8ringen og kobler til p\u00e5 nytt. Da lagres den nye n\u00f8kkelen.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ ssh-keygen -R 192.0.2.50\n# Host 192.0.2.50 found: line 3\n\/home\/sam\/.ssh\/known_hosts updated.\n$ ssh produksjon<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"too-many-authentication-failures\">Too many authentication failures<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Har du mange n\u00f8kler i agenten, pr\u00f8ver SSH dem alle, og serveren kan lukke forbindelsen f\u00f8r den riktige n\u00f8kkelen kommer til. L\u00f8sningen er <code>IdentitiesOnly yes<\/code> i config-filen, som tvinger SSH til \u00e5 bruke bare den oppgitte n\u00f8kkelen. Du kan ogs\u00e5 teste direkte fra kommandolinjen.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ ssh -o IdentitiesOnly=yes -i ~\/.ssh\/id_ed25519 sam@192.0.2.50<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Andre vanlige feil l\u00f8ser du raskt: \u00abConnection refused\u00bb betyr som regel at SSH-tjenesten er nede eller lytter p\u00e5 en annen port, sjekk med <code>sudo systemctl status ssh<\/code> og <code>sudo ss -tlnp | grep ssh<\/code>. \u00abAgent admitted failure\u00bb betyr at n\u00f8kkelen ikke er lastet i agenten, kj\u00f8r <code>ssh-add<\/code> p\u00e5 nytt. Vil du bekrefte at en privat n\u00f8kkel er gyldig og hente den tilh\u00f8rende offentlige delen, bruker du <code>ssh-keygen -y -f ~\/.ssh\/id_ed25519<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"known_hosts-og-vertsnokler-verifiser-serveren\">known_hosts og vertsn\u00f8kler: verifiser serveren<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">SSH-n\u00f8kler beskytter deg mot at andre utgir seg for \u00e5 v\u00e6re deg. Vertsn\u00f8kler beskytter deg mot at noen utgir seg for \u00e5 v\u00e6re serveren. F\u00f8rste gang du kobler til en server, viser SSH serverens fingeravtrykk og sp\u00f8r om du stoler p\u00e5 det. Sier du ja, lagres n\u00f8kkelen i <code>~\/.ssh\/known_hosts<\/code>, og fra da av sjekker SSH at serveren er den samme hver gang.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ ssh sam@192.0.2.50\nThe authenticity of host '192.0.2.50' can't be established.\nED25519 key fingerprint is SHA256:rT4kP9wL2mX8vB1nQ6cF3jH7sD0aG5yK4uE2oI9pN8s.\nAre you sure you want to continue connecting (yes\/no\/[fingerprint])?<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Her b\u00f8r du ikke bare trykke ja blindt. Endres en vertsn\u00f8kkel uventet senere, kan det bety et man-in-the-middle-angrep. Den trygge m\u00e5ten er \u00e5 hente serverens fingeravtrykk p\u00e5 forh\u00e5nd, direkte p\u00e5 serveren, og sammenligne. Kj\u00f8r kommandoen under p\u00e5 serveren og kontroller at strengen stemmer med den SSH viser deg.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ ssh-keygen -lf \/etc\/ssh\/ssh_host_ed25519_key.pub\n256 SHA256:rT4kP9wL2mX8vB1nQ6cF3jH7sD0aG5yK4uE2oI9pN8s root@server (ED25519)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Stemmer fingeravtrykkene, vet du at du snakker med riktig maskin. For fl\u00e5ter av servere kan du distribuere en ferdig <code>known_hosts<\/code>-fil til alle klienter, eller bruke SSH-sertifikater for vertsn\u00f8kler slik at klientene stoler p\u00e5 en CA i stedet for hver enkelt server. Det fjerner sp\u00f8rsm\u00e5let helt og hindrer at brukere venner seg til \u00e5 trykke ja uten \u00e5 tenke.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"avanserte-tips-for-proffer\">Avanserte tips for proffer<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e5r grunnoppsettet sitter, finnes det flere grep som skalerer og strammer til. Disse er verdt \u00e5 kjenne n\u00e5r du forvalter mange servere eller et helt team.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Egne n\u00f8kler per form\u00e5l.<\/strong> Lag separate n\u00f8kler for jobb, privat, GitHub og servere. Da kan du tilbakekalle \u00e9n uten \u00e5 p\u00e5virke resten. Pek p\u00e5 riktig n\u00f8kkel per Host i config-filen.<\/li>\n<li><strong>SSH-sertifikater i stedet for authorized_keys.<\/strong> Med en egen CA signerer du brukern\u00f8kler som er gyldige i et begrenset tidsrom. Servere stoler p\u00e5 CA-en, ikke p\u00e5 enkeltn\u00f8kler, s\u00e5 du slipper \u00e5 oppdatere <code>authorized_keys<\/code> p\u00e5 hundrevis av maskiner.<\/li>\n<li><strong>Begrens n\u00f8kler i authorized_keys.<\/strong> Du kan prefiksere en n\u00f8kkel med <code>from=\"192.0.2.0\/24\"<\/code>, <code>command=\"...\"<\/code> eller <code>no-port-forwarding<\/code> for \u00e5 l\u00e5se en n\u00f8kkel til en bestemt kilde eller et bestemt skript. Nyttig for automatiserte sikkerhetskopier.<\/li>\n<li><strong>Jump hosts.<\/strong> Bruk <code>ProxyJump bastion<\/code> for \u00e5 n\u00e5 servere bak en bastion uten \u00e5 eksponere dem direkte. Tryggere enn agentvideresending.<\/li>\n<li><strong>Roter n\u00f8kler jevnlig.<\/strong> Sett en rutine for \u00e5 bytte n\u00f8kler, for eksempel \u00e5rlig, og fjern gamle n\u00f8kler fra alle <code>authorized_keys<\/code>-filer. Et verkt\u00f8y som Ansible gj\u00f8r dette trivielt.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Kombiner dette med god grunnsikkerhet ellers. SSH-herding er ett lag, men en server trenger ogs\u00e5 brannmur, oppdateringer og overv\u00e5king. For organisasjoner i Norge griper dette inn i kravene under den nye <a href=\"\/no\/nis2-norge-digitalsikkerhetsloven-2026\/\">digitalsikkerhetsloven<\/a>, der tilgangskontroll og sikker fjerntilgang er uttrykkelige krav.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"komplett-eksempelprosjekt-fra-null-til-herdet-server\">Komplett eksempelprosjekt: fra null til herdet server<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Her er hele flyten samlet, fra en fersk server til en der bare n\u00f8kkelinnlogging er tillatt. Kj\u00f8r dette i rekkef\u00f8lge fra din lokale maskin. Erstatt <code>sam<\/code> og IP-adressen med dine egne verdier. Dette er det fullstendige, fungerende prosjektet du kan gjenbruke for hver ny server.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># 1. Generer nokkel (lokalt) hvis du ikke har en\nssh-keygen -t ed25519 -a 100 -C \"sam@laptop-2026\"\n\n# 2. Last nokkelen inn i agenten\neval \"$(ssh-agent -s)\"\nssh-add ~\/.ssh\/id_ed25519\n\n# 3. Kopier offentlig nokkel til serveren\nssh-copy-id -i ~\/.ssh\/id_ed25519.pub sam@192.0.2.50\n\n# 4. Test nokkelinnlogging\nssh sam@192.0.2.50 \"echo 'Nokkelinnlogging fungerer'\"\n\n# 5. Lag en config-oppforing (lokalt)\ncat &gt;&gt; ~\/.ssh\/config &lt;&lt;'EOF'\nHost produksjon\n    HostName 192.0.2.50\n    User sam\n    IdentityFile ~\/.ssh\/id_ed25519\n    IdentitiesOnly yes\nEOF\nchmod 600 ~\/.ssh\/config<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Deretter herder du serveren. Logg inn og kj\u00f8r disse kommandoene p\u00e5 serveren. De skriver de viktigste innstillingene til en egen fil i <code>sshd_config.d<\/code>, som er den ryddige m\u00e5ten \u00e5 gj\u00f8re det p\u00e5 i moderne Ubuntu.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Kjores PA serveren, i en apen okt\nsudo tee \/etc\/ssh\/sshd_config.d\/90-herding.conf &gt; \/dev\/null &lt;&lt;'EOF'\nPasswordAuthentication no\nPubkeyAuthentication yes\nPermitRootLogin prohibit-password\nKbdInteractiveAuthentication no\nMaxAuthTries 3\nEOF\n\n# Test syntaks og last inn pa nytt\nsudo sshd -t &amp;&amp; sudo systemctl reload ssh\n\n# IKKE lukk denne okten. Test i et NYTT vindu:\n#   ssh produksjon<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e5r den nye innloggingen i et eget vindu fungerer, er du ferdig. Du har en server der passordbaserte angrep er umulige, der hver innlogging er en kryptografisk signert hendelse, og der hele oppsettet er dokumentert i to korte filer. Gjenta de samme stegene for neste server, og du har en gjentakbar, sikker rutine. Vil du g\u00e5 videre, kan du sette opp en kryptert tunnel mellom maskinene dine med v\u00e5r guide til <a href=\"\/no\/wireguard-vpn-linux\/\">WireGuard VPN p\u00e5 Linux<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"ofte-stilte-sporsmal-om-ssh-nokler\">Ofte stilte sp\u00f8rsm\u00e5l om SSH-n\u00f8kler<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"er-en-ssh-nokkel-virkelig-tryggere-enn-et-sterkt-passord\">Er en SSH-n\u00f8kkel virkelig tryggere enn et sterkt passord?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ja, med god margin. En Ed25519-n\u00f8kkel gir rundt 128 bits sikkerhet, langt mer enn noe passord et menneske kan huske. I tillegg sendes den hemmelige delen aldri til serveren, s\u00e5 den kan ikke fanges underveis eller lekke fra serverens database. Et passord kan phishes, gjettes eller fanges av en keylogger. En privat n\u00f8kkel som er beskyttet med passordfrase, har ingen av disse svakhetene.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"hva-skjer-hvis-jeg-mister-den-private-nokkelen\">Hva skjer hvis jeg mister den private n\u00f8kkelen?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Da mister du muligheten til \u00e5 logge inn med den n\u00f8kkelen, men ingen andre kan bruke den hvis den var beskyttet med en passordfrase. Du fjerner den offentlige n\u00f8kkelen fra <code>authorized_keys<\/code> p\u00e5 serverne og legger inn en ny n\u00f8kkel. Derfor er det lurt \u00e5 ha en alternativ innloggingsmetode, for eksempel en reserven\u00f8kkel, og \u00e5 sette passordfrase p\u00e5 n\u00f8klene.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"kan-jeg-bruke-samme-nokkel-pa-flere-maskiner\">Kan jeg bruke samme n\u00f8kkel p\u00e5 flere maskiner?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Teknisk ja, men det anbefales ikke. Bedre praksis er \u00e9n n\u00f8kkel per enhet. Da kan du tilbakekalle n\u00f8kkelen til en stj\u00e5let laptop uten \u00e5 p\u00e5virke de andre enhetene dine. Den offentlige delen av hver n\u00f8kkel legges i <code>authorized_keys<\/code> p\u00e5 serverne du vil n\u00e5.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"trenger-jeg-passordfrase-hvis-nokkelen-ligger-pa-en-kryptert-disk\">Trenger jeg passordfrase hvis n\u00f8kkelen ligger p\u00e5 en kryptert disk?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ja. Diskkryptering beskytter n\u00e5r maskinen er avsl\u00e5tt, men n\u00e5r du er logget inn, ligger n\u00f8kkelen tilgjengelig. En passordfrase gir et ekstra lag som beskytter selv om noen f\u00e5r tilgang til en p\u00e5sl\u00e5tt, ul\u00e5st maskin. Med ssh-agent merker du knapt forskjellen i hverdagen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"hvilken-nokkeltype-bor-jeg-velge-i-2026\">Hvilken n\u00f8kkeltype b\u00f8r jeg velge i 2026?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ed25519 for alle nye n\u00f8kler. Den er rask, liten og uten kjente svakheter i bruk. Velg RSA 4096 bare hvis du m\u00f8ter et eldre system som ikke st\u00f8tter Ed25519. Unng\u00e5 ECDSA med mindre du m\u00e5 av kompatibilitetshensyn, og bruk aldri DSA, som er fjernet fra OpenSSH 10.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"hvordan-fjerner-jeg-en-nokkel-jeg-ikke-lenger-stoler-pa\">Hvordan fjerner jeg en n\u00f8kkel jeg ikke lenger stoler p\u00e5?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Logg inn p\u00e5 serveren og slett den aktuelle linjen fra <code>~\/.ssh\/authorized_keys<\/code>. N\u00f8kkelen mister da all tilgang umiddelbart. Bruker du SSH-sertifikater, lar du i stedet sertifikatet utl\u00f8pe eller legger n\u00f8kkelen i en tilbakekallingsliste (KRL). For flere servere automatiserer du jobben med et verkt\u00f8y som Ansible.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"beskytter-ssh-meg-mot-kvantedatamaskiner\">Beskytter SSH meg mot kvantedatamaskiner?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Delvis, og det blir stadig bedre. OpenSSH 10 bruker en post-kvante hybrid n\u00f8kkelutveksling som standard for selve tunnelen, s\u00e5 trafikken din er beskyttet mot fremtidig kvantedekryptering av lagret data. Selve autentiseringsn\u00f8klene (Ed25519, RSA) er forel\u00f8pig klassiske, men det viktigste, fortroligheten til trafikken, er allerede kvantesikret. Hold OpenSSH oppdatert for \u00e5 f\u00e5 med deg utviklingen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"hvorfor-blir-jeg-fortsatt-bedt-om-passord-etter-at-jeg-satte-opp-nokkelen\">Hvorfor blir jeg fortsatt bedt om passord etter at jeg satte opp n\u00f8kkelen?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Da brukes ikke n\u00f8kkelen. De vanligste \u00e5rsakene er feil rettigheter p\u00e5 <code>~\/.ssh<\/code> eller <code>authorized_keys<\/code> p\u00e5 serveren, at n\u00f8kkelen ligger hos feil bruker, eller at serveren har <code>PubkeyAuthentication no<\/code>. Kj\u00f8r <code>ssh -v<\/code> og se etter \u00abServer accepts key\u00bb. Mangler den linjen, ligger problemet p\u00e5 serversiden, oftest i rettighetene.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"relatert-innhold\">Relatert innhold<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"\/no\/wireguard-vpn-linux\/\">WireGuard VPN p\u00e5 Linux: 12 steg, 1472 Mbps [2026]<\/a><\/li>\n<li><a href=\"\/no\/digitale-signaturer\/\">Digitale signaturer: hashfunksjoner og asymmetriske n\u00f8kler<\/a><\/li>\n<li><a href=\"\/no\/https-og-tls\/\">HTTPS og TLS: slik beskyttes forbindelsen din p\u00e5 nett<\/a><\/li>\n<li><a href=\"\/no\/sha-256\/\">SHA-256 forklart: 256-bits avtrykk i praksis<\/a><\/li>\n<li><a href=\"\/no\/passordsikkerhet\/\">Passordsikkerhet: sterke passord, hashing og tofaktor<\/a><\/li>\n<li><a href=\"\/no\/cryptography-hub\/\">Kryptografi: hashfunksjoner, SHA og digital tillit<\/a><\/li>\n<li><a href=\"\/no\/nis2-norge-digitalsikkerhetsloven-2026\/\">NIS2 i Norge: 5.000 virksomheter, 4 % bot [2026]<\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"kilder-og-videre-lesning\">Kilder og videre lesning<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.openssh.com\/releasenotes.html\" target=\"_blank\" rel=\"noopener\">OpenSSH release notes<\/a><\/li>\n<li><a href=\"https:\/\/man.openbsd.org\/ssh-keygen\" target=\"_blank\" rel=\"noopener\">ssh-keygen manualside (OpenBSD)<\/a><\/li>\n<li><a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc8709\" target=\"_blank\" rel=\"noopener\">RFC 8709: Ed25519 og Ed448 i SSH<\/a><\/li>\n<li><a href=\"https:\/\/wiki.archlinux.org\/title\/SSH_keys\" target=\"_blank\" rel=\"noopener\">Arch Linux Wiki: SSH keys<\/a><\/li>\n<li><a href=\"https:\/\/docs.github.com\/en\/authentication\/connecting-to-github-with-ssh\/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent\" target=\"_blank\" rel=\"noopener\">GitHub: generere en ny SSH-n\u00f8kkel<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Passord lekker, gjettes og gjenbrukes. En SSH-n\u00f8kkel gj\u00f8r ingen av delene. N\u00e5r du logger inn med n\u00f8kkel, forlater den hemmelige delen aldri maskinen din, og serveren slipper \u00e5 lagre noe\u2026<\/p>\n","protected":false},"author":5,"featured_media":71,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-70","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cryptography"],"_links":{"self":[{"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/posts\/70","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/comments?post=70"}],"version-history":[{"count":1,"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/posts\/70\/revisions"}],"predecessor-version":[{"id":72,"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/posts\/70\/revisions\/72"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/media\/71"}],"wp:attachment":[{"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/media?parent=70"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/categories?post=70"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/tags?post=70"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}