{"id":84,"date":"2026-06-15T16:48:57","date_gmt":"2026-06-15T16:48:57","guid":{"rendered":"https:\/\/shattered.io\/se\/2026\/06\/15\/ssh-nycklar-linux\/"},"modified":"2026-06-15T16:50:30","modified_gmt":"2026-06-15T16:50:30","slug":"ssh-nycklar-linux","status":"publish","type":"post","link":"https:\/\/shattered.io\/se\/ssh-nycklar-linux\/","title":{"rendered":"SSH-nycklar i Linux: 12 steg, 20 min [2026]"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">L\u00f6senord \u00e4r den svagaste l\u00e4nken i n\u00e4stan varje serverintr\u00e5ng. Angripare k\u00f6r automatiserade ordlistor mot port 22 dygnet runt, och en exponerad server ser ofta tusentals inloggningsf\u00f6rs\u00f6k per dygn redan f\u00f6rsta veckan online. SSH-nycklar l\u00f6ser problemet vid roten: i st\u00e4llet f\u00f6r en hemlighet du kan gissa anv\u00e4nder du ett kryptografiskt nyckelpar som \u00e4r praktiskt taget om\u00f6jligt att forcera. Den h\u00e4r guiden tar dig genom 12 konkreta steg, fr\u00e5n att skapa din f\u00f6rsta ed25519-nyckel till en helt h\u00e4rdad <code>sshd_config<\/code> med fail2ban och moderna, kvants\u00e4kra nyckelutbyten.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vi anv\u00e4nder OpenSSH 10.x, som \u00e4r standard i Ubuntu, Debian, Fedora och de flesta moderna Linux-distributioner under 2026. Hela arbetsfl\u00f6det tar ungef\u00e4r 20 minuter, och du beh\u00f6ver inga betaltj\u00e4nster. N\u00e4r du \u00e4r klar loggar du in utan l\u00f6senord, har st\u00e4ngt av l\u00f6senordsinloggning helt och har ett verktyg som blockerar brute force-angrepp automatiskt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"varfor-ssh-nycklar\">Varf\u00f6r SSH-nycklar sl\u00e5r l\u00f6senord<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">SSH (Secure Shell) \u00e4r protokollet som administrat\u00f6rer anv\u00e4nder f\u00f6r att fj\u00e4rrstyra servrar. Som standard till\u00e5ter m\u00e5nga system inloggning med anv\u00e4ndarnamn och l\u00f6senord, och det \u00e4r exakt den d\u00f6rren angripare bankar p\u00e5. Ett l\u00f6senord p\u00e5 tolv tecken kan k\u00e4nnas starkt, men mot en automatiserad attack som testar miljontals kombinationer fr\u00e5n ett botn\u00e4t \u00e4r marginalen mindre \u00e4n du tror. En SSH-nyckel bygger i st\u00e4llet p\u00e5 asymmetrisk kryptering: en privat nyckel som aldrig l\u00e4mnar din dator och en publik nyckel som du l\u00e4gger p\u00e5 servern.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Skillnaden i praktiken \u00e4r enorm. En ed25519-nyckel har en effektiv s\u00e4kerhetsniv\u00e5 runt 128 bitar, vilket motsvarar att gissa ett slumpm\u00e4ssigt l\u00f6senord p\u00e5 cirka 22 tecken. Ingen ordlista i v\u00e4rlden kommer \u00e5t den. L\u00e4gg till att nyckeln aldrig skickas \u00f6ver n\u00e4tverket, och du eliminerar b\u00e5de gissningsattacker och risken att ett l\u00f6senord f\u00e5ngas upp p\u00e5 v\u00e4gen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Det handlar inte bara om teori. Brute force mot SSH \u00e4r en av de vanligaste ing\u00e5ngarna i ransomware-incidenter, och exponerade servrar utan nyckelautentisering h\u00f6r till de f\u00f6rsta som komprometteras. Att g\u00e5 \u00f6ver till nycklar och st\u00e4nga av l\u00f6senord \u00e4r den enskilt st\u00f6rsta s\u00e4kerhetsvinsten du kan g\u00f6ra p\u00e5 en Linux-server, och den kostar ingenting. Samma princip med publika och privata nycklar ligger bakom <a href=\"https:\/\/shattered.io\/se\/2026\/06\/10\/digitala-signaturer\/\">digitala signaturer<\/a> och <a href=\"https:\/\/shattered.io\/se\/2026\/06\/13\/pgp-kryptering-gpg\/\">PGP-kryptering med GPG<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"sa-fungerar-nyckelautentisering\">S\u00e5 fungerar SSH-nyckelautentisering<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Asymmetrisk kryptering anv\u00e4nder tv\u00e5 matematiskt sammanl\u00e4nkade nycklar. Det som krypteras eller signeras med den ena kan bara verifieras med den andra, men du kan inte r\u00e4kna ut den privata nyckeln fr\u00e5n den publika. Det \u00e4r denna env\u00e4gsrelation som g\u00f6r nyckelautentisering s\u00e4ker.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e4r du ansluter sker en handskakning i fyra steg. Klienten meddelar vilken publik nyckel den vill anv\u00e4nda. Servern kontrollerar att samma publika nyckel finns i filen <code>~\/.ssh\/authorized_keys<\/code> f\u00f6r det kontot. Servern skickar en kryptografisk utmaning. Klienten signerar utmaningen med sin privata nyckel och skickar tillbaka beviset. Servern verifierar signaturen mot den publika nyckeln och sl\u00e4pper in dig. Den privata nyckeln l\u00e4mnar aldrig din maskin, och inget hemligt material g\u00e5r \u00f6ver ledningen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Den privata nyckeln b\u00f6r i sin tur skyddas med en l\u00f6senfras. D\u00e5 kr\u00e4vs tv\u00e5 saker f\u00f6r att logga in: filen med nyckeln och l\u00f6senfrasen som l\u00e5ser upp den. Det \u00e4r tv\u00e5faktorsprincipen i miniatyr, n\u00e5got du har och n\u00e5got du vet. L\u00f6senfrasen verifieras lokalt p\u00e5 din dator och skickas aldrig till servern, s\u00e5 \u00e4ven en server som blivit komprometterad ser den aldrig.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"forutsattningar\">F\u00f6ruts\u00e4ttningar och versioner<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Innan du b\u00f6rjar beh\u00f6ver du f\u00f6ljande. Versionerna nedan \u00e4r vad som g\u00e4ller under 2026, men nyare fungerar lika bra.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>En klientdator<\/strong> med Linux, macOS eller Windows 10\/11. OpenSSH-klienten \u00e4r f\u00f6rinstallerad p\u00e5 alla tre.<\/li>\n<li><strong>En Linux-server<\/strong> du har root- eller sudo-\u00e5tkomst till (Ubuntu 24.04 LTS, Debian 12\/13, Fedora 41+ eller liknande).<\/li>\n<li><strong>OpenSSH 9.0 eller senare<\/strong> p\u00e5 b\u00e5de klient och server. OpenSSH 10.x \u00e4r standard i 2026 \u00e5rs distributioner och rekommenderas.<\/li>\n<li><strong>Terminal\u00e5tkomst<\/strong> och grundl\u00e4ggande vana vid kommandoraden.<\/li>\n<li><strong>Ett befintligt s\u00e4tt att logga in<\/strong> (l\u00f6senord eller konsol) s\u00e5 att du inte l\u00e5ser ute dig sj\u00e4lv medan du konfigurerar.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Ett varningsord innan vi b\u00f6rjar: h\u00e5ll alltid en andra session \u00f6ppen mot servern medan du \u00e4ndrar i <code>sshd_config<\/code>. Om du r\u00e5kar konfigurera fel och st\u00e4nger din enda anslutning kan du bli utel\u00e5st. Med en extra session kan du alltid \u00e5ngra \u00e4ndringen. M\u00e5nga molnleverant\u00f6rer erbjuder dessutom en webbkonsol som ett sista skyddsn\u00e4t.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-1-kontrollera-version\">Steg 1: Kontrollera din OpenSSH-version<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Kontrollera f\u00f6rst vilken version du k\u00f6r. Vissa funktioner i den h\u00e4r guiden, som det kvants\u00e4kra nyckelutbytet, kr\u00e4ver OpenSSH 9.0 eller senare. K\u00f6r p\u00e5 b\u00e5de klient och server:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh -V<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Du f\u00e5r ut n\u00e5got i stil med:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>OpenSSH_10.0p1, OpenSSL 3.4.1 1 Apr 2026<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c4r versionen \u00e4ldre \u00e4n 9.0 b\u00f6r du uppdatera. P\u00e5 Debian och Ubuntu r\u00e4cker oftast <code>sudo apt update &amp;&amp; sudo apt upgrade openssh-server openssh-client<\/code>, p\u00e5 Fedora <code>sudo dnf upgrade openssh openssh-server<\/code>. OpenSSH 10.0 sl\u00e4pptes i april 2025 och gjorde det kvants\u00e4kra nyckelutbytet <code>mlkem768x25519-sha256<\/code> till standard, s\u00e5 ju nyare desto b\u00e4ttre.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-2-generera-nyckel\">Steg 2: Generera ett ed25519-nyckelpar<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nu skapar vi sj\u00e4lva nyckelparet. Vi v\u00e4ljer ed25519, som \u00e4r snabbare, kortare och minst lika s\u00e4kert som RSA. P\u00e5 din <strong>klientdator<\/strong> (inte servern), k\u00f6r:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh-keygen -t ed25519 -a 100 -C \"sam@laptop-2026\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Flaggorna betyder f\u00f6ljande. <code>-t ed25519<\/code> v\u00e4ljer nyckeltypen. <code>-a 100<\/code> s\u00e4tter antalet KDF-rundor som skyddar den krypterade privata nyckeln; ett h\u00f6gre tal g\u00f6r en stulen nyckelfil dyrare att forcera. <code>-C<\/code> \u00e4r en kommentar som hj\u00e4lper dig k\u00e4nna igen nyckeln senare, till exempel vem och vilken dator den tillh\u00f6r. Du f\u00e5r sedan fr\u00e5gor:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Generating 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:9xQ2k...8fT0 sam@laptop-2026<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Tryck Enter f\u00f6r standards\u00f6kv\u00e4gen om du inte redan har en nyckel med samma namn. Ange en stark l\u00f6senfras n\u00e4r den fr\u00e5gas. Du f\u00e5r nu tv\u00e5 filer: <code>id_ed25519<\/code> (privat, dela aldrig) och <code>id_ed25519.pub<\/code> (publik, den som ska till servern).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ed25519-vs-rsa\">ed25519, RSA eller ECDSA?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Du kan v\u00e4lja andra nyckeltyper, men f\u00f6r nya nycklar 2026 \u00e4r ed25519 standardvalet. Tabellen visar varf\u00f6r.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Nyckeltyp<\/th><th>Nyckell\u00e4ngd<\/th><th>S\u00e4kerhetsniv\u00e5<\/th><th>Rekommendation 2026<\/th><\/tr><\/thead><tbody>\n<tr><td>ed25519<\/td><td>256 bitar<\/td><td>~128 bitar<\/td><td>F\u00f6rstahandsval f\u00f6r nya nycklar<\/td><\/tr>\n<tr><td>ecdsa (nistp256)<\/td><td>256 bitar<\/td><td>~128 bitar<\/td><td>Fungerar, men ed25519 f\u00f6redras<\/td><\/tr>\n<tr><td>rsa 4096<\/td><td>4096 bitar<\/td><td>~140 bitar<\/td><td>Endast f\u00f6r bak\u00e5tkompatibilitet<\/td><\/tr>\n<tr><td>rsa 3072<\/td><td>3072 bitar<\/td><td>~128 bitar<\/td><td>Minimum om RSA kr\u00e4vs<\/td><\/tr>\n<tr><td>rsa 2048<\/td><td>2048 bitar<\/td><td>~112 bitar<\/td><td>Undvik, f\u00f6r svag p\u00e5 sikt<\/td><\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Beh\u00f6ver du RSA av kompatibilitetssk\u00e4l, k\u00f6r <code>ssh-keygen -t rsa -b 4096 -a 100<\/code>. F\u00f6r allt annat \u00e4r ed25519 snabbare att verifiera, ger kortare nycklar och har inga av de svagheter i slumptalsgenerering som drabbat ECDSA-implementeringar historiskt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-3-skydda-privat-nyckel\">Steg 3: Skydda den privata nyckeln<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Den privata nyckeln \u00e4r hela ditt f\u00f6rsvar. Hamnar den i fel h\u00e4nder utan l\u00f6senfras \u00e4r spelet \u00f6ver. Tv\u00e5 saker g\u00e4ller: r\u00e4tt filr\u00e4ttigheter och en stark l\u00f6senfras.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">OpenSSH v\u00e4grar anv\u00e4nda en privat nyckel som \u00e4r l\u00e4sbar f\u00f6r andra anv\u00e4ndare. S\u00e4kerst\u00e4ll r\u00e4tt r\u00e4ttigheter:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>chmod 700 ~\/.ssh\nchmod 600 ~\/.ssh\/id_ed25519\nchmod 644 ~\/.ssh\/id_ed25519.pub<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Hoppade du \u00f6ver l\u00f6senfrasen i steg 2 kan du l\u00e4gga till en i efterhand utan att skapa en ny nyckel:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh-keygen -p -a 100 -f ~\/.ssh\/id_ed25519<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">En l\u00f6senfras g\u00f6r att en stulen nyckelfil \u00e4r v\u00e4rdel\u00f6s utan den. V\u00e4lj en l\u00e5ng fras med flera ord, g\u00e4rna hanterad i din <a href=\"https:\/\/shattered.io\/se\/2026\/06\/10\/losenordssakerhet\/\">l\u00f6senordshanterare<\/a>. Vi visar i steg 11 hur ssh-agent g\u00f6r att du bara beh\u00f6ver skriva l\u00f6senfrasen en g\u00e5ng per session, s\u00e5 bekv\u00e4mligheten kostar dig n\u00e4stan ingenting.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-4-kopiera-publik-nyckel\">Steg 4: Kopiera den publika nyckeln till servern<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nu l\u00e4gger vi den publika nyckeln p\u00e5 servern. Det enklaste s\u00e4ttet \u00e4r <code>ssh-copy-id<\/code>, som hanterar b\u00e5de r\u00e4ttigheter och kataloger \u00e5t dig:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh-copy-id -i ~\/.ssh\/id_ed25519.pub sam@192.0.2.10<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Byt ut <code>sam<\/code> mot ditt anv\u00e4ndarnamn och <code>192.0.2.10<\/code> mot serverns IP-adress eller v\u00e4rdnamn. Du loggar in med l\u00f6senord en sista g\u00e5ng, och kommandot l\u00e4gger nyckeln i <code>~\/.ssh\/authorized_keys<\/code>. Utdata ser ut s\u00e5 h\u00e4r:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Number of key(s) added: 1\n\nNow try logging into the machine, with:   \"ssh 'sam@192.0.2.10'\"\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\">Saknar systemet <code>ssh-copy-id<\/code>, exempelvis p\u00e5 vissa minimala installationer eller Windows, kan du g\u00f6ra det manuellt:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cat ~\/.ssh\/id_ed25519.pub | ssh sam@192.0.2.10 \\\n  \"mkdir -p ~\/.ssh &amp;&amp; chmod 700 ~\/.ssh &amp;&amp; cat >> ~\/.ssh\/authorized_keys &amp;&amp; chmod 600 ~\/.ssh\/authorized_keys\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">B\u00e5da metoderna ger samma resultat: din publika nyckel finns nu i serverns lista \u00f6ver betrodda nycklar f\u00f6r ditt konto.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-5-verifiera-inloggning\">Steg 5: Logga in och verifiera nyckelautentisering<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Testa nu att nyckeln fungerar innan vi r\u00f6r servern vidare. Logga in:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh sam@192.0.2.10<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Om du satte en l\u00f6senfras blir du ombedd att l\u00e5sa upp den lokala nyckeln, inte att ange ett serverl\u00f6senord. F\u00f6r att se exakt vad som h\u00e4nder, k\u00f6r med utf\u00f6rlig loggning:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh -v sam@192.0.2.10 2>&amp;1 | grep -i \"authentication\\|offering\\|accepted\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Den rad du vill se bekr\u00e4ftar publik nyckel-autentisering:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>debug1: Offering public key: \/home\/sam\/.ssh\/id_ed25519 ED25519 SHA256:9xQ2k...8fT0\ndebug1: Server accepts key: \/home\/sam\/.ssh\/id_ed25519 ED25519 SHA256:9xQ2k...8fT0\ndebug1: Authentication succeeded (publickey).<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ser du <code>Authentication succeeded (publickey)<\/code> \u00e4r nyckeln p\u00e5 plats. Det h\u00e4r steget \u00e4r kritiskt: bekr\u00e4fta att nyckelinloggningen fungerar <strong>innan<\/strong> du st\u00e4nger av l\u00f6senord i n\u00e4sta steg, annars riskerar du att l\u00e5sa ute dig sj\u00e4lv.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-6-klientkonfiguration\">Steg 6: Konfigurera klienten med ~\/.ssh\/config<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Att skriva fullst\u00e4ndig adress och flaggor varje g\u00e5ng blir snabbt tr\u00f6ttsamt. En klientkonfiguration p\u00e5 din egen dator g\u00f6r inloggningen kortare och tydligare. Skapa eller redigera <code>~\/.ssh\/config<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Host webbserver\n    HostName 192.0.2.10\n    User sam\n    Port 22\n    IdentityFile ~\/.ssh\/id_ed25519\n    IdentitiesOnly yes\n    AddKeysToAgent yes\n\nHost *\n    ServerAliveInterval 60\n    ServerAliveCountMax 3<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Nu r\u00e4cker det att skriva <code>ssh webbserver<\/code>. <code>IdentitiesOnly yes<\/code> ser till att bara den angivna nyckeln erbjuds, vilket undviker problem om du har m\u00e5nga nycklar. <code>ServerAliveInterval<\/code> h\u00e5ller anslutningen vid liv genom brandv\u00e4ggar som annars st\u00e4nger inaktiva sessioner. S\u00e4tt r\u00e4tt r\u00e4ttigheter p\u00e5 filen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>chmod 600 ~\/.ssh\/config<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-7-harda-sshd\">Steg 7: H\u00e4rda sshd_config p\u00e5 servern<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nu kommer den viktigaste delen: att st\u00e4nga av l\u00f6senordsinloggning p\u00e5 servern. \u00d6ppna serverns konfiguration med en andra session redan ig\u00e5ng (se varningen i f\u00f6ruts\u00e4ttningarna):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/ssh\/sshd_config<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">S\u00e4tt eller \u00e4ndra f\u00f6ljande rader. P\u00e5 moderna system ligger en del inst\u00e4llningar i <code>\/etc\/ssh\/sshd_config.d\/<\/code>, s\u00e5 kontrollera att ingen fil d\u00e4r skriver \u00f6ver dina v\u00e4rden.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>PasswordAuthentication no\nKbdInteractiveAuthentication no\nChallengeResponseAuthentication no\nPubkeyAuthentication yes\nPermitRootLogin prohibit-password\nPermitEmptyPasswords no\nUsePAM yes<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>PasswordAuthentication no<\/code> \u00e4r raden som st\u00e4nger d\u00f6rren f\u00f6r brute force. <code>KbdInteractiveAuthentication no<\/code> och <code>ChallengeResponseAuthentication no<\/code> st\u00e4nger alternativa l\u00f6senordsprompter s\u00e5 att de inte kan kringg\u00e5 din avsikt. <code>PermitRootLogin prohibit-password<\/code> till\u00e5ter root endast via nyckel, aldrig med l\u00f6senord. Testa konfigurationen innan du laddar om:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo sshd -t &amp;&amp; sudo systemctl reload ssh<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>sshd -t<\/code> kontrollerar syntaxen och v\u00e4grar ladda om vid fel, vilket skyddar dig fr\u00e5n att l\u00e5sa ute dig. P\u00e5 vissa distributioner heter tj\u00e4nsten <code>sshd<\/code> i st\u00e4llet f\u00f6r <code>ssh<\/code>; anv\u00e4nd d\u00e5 <code>sudo systemctl reload sshd<\/code>. \u00d6ppna nu en helt ny terminal och testa att logga in. Lyckas det, och ett f\u00f6rs\u00f6k med l\u00f6senord nekas, \u00e4r h\u00e4rdningen klar.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-8-moderna-krypton\">Steg 8: Moderna krypton och kvants\u00e4kert nyckelutbyte<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">OpenSSH 10.x v\u00e4ljer redan starka algoritmer som standard, men du kan begr\u00e4nsa servern till enbart moderna val. Det skyddar mot nedgraderingsattacker och f\u00f6rbereder f\u00f6r kvantdatorer. L\u00e4gg till i <code>sshd_config<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>KexAlgorithms mlkem768x25519-sha256,sntrup761x25519-sha256,curve25519-sha256\nCiphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com\nMACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com\nHostKeyAlgorithms ssh-ed25519,rsa-sha2-512<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Nyckelutbytet <code>mlkem768x25519-sha256<\/code> \u00e4r ett hybridutbyte: det kombinerar den klassiska Curve25519 med ML-KEM (tidigare Kyber), en algoritm som NIST standardiserat som kvants\u00e4ker. Hybriden betyder att anslutningen f\u00f6rblir s\u00e4ker \u00e4ven om den ena delen kn\u00e4cks. OpenSSH inf\u00f6rde det \u00e4ldre <code>sntrup761x25519-sha256<\/code> som standard redan i version 9.0 (2022) och gjorde <code>mlkem768x25519-sha256<\/code> till standard i version 10.0 (2025).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Varf\u00f6r bry sig om kvants\u00e4kerhet redan nu? Angripare samlar krypterad trafik idag i hopp om att kunna dekryptera den senare med en kvantdator, en strategi som kallas &#8220;sk\u00f6rda nu, dekryptera sedan&#8221;. Hybridutbytet st\u00e4nger den d\u00f6rren. Vi g\u00e5r djupare i \u00e4mnet i v\u00e5r guide om <a href=\"https:\/\/shattered.io\/se\/2026\/06\/10\/https-och-tls\/\">HTTPS och TLS<\/a>. Tabellen sammanfattar OpenSSH:s v\u00e4g mot kvants\u00e4kerhet.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>OpenSSH-version<\/th><th>Sl\u00e4ppt<\/th><th>Milstolpe f\u00f6r nyckelutbyte<\/th><\/tr><\/thead><tbody>\n<tr><td>9.0<\/td><td>April 2022<\/td><td>sntrup761x25519-sha256 som standard<\/td><\/tr>\n<tr><td>9.9<\/td><td>September 2024<\/td><td>mlkem768x25519-sha256 inf\u00f6rt<\/td><\/tr>\n<tr><td>10.0<\/td><td>April 2025<\/td><td>mlkem768x25519-sha256 blir standard<\/td><\/tr>\n<tr><td>10.x<\/td><td>2026<\/td><td>Fortsatt h\u00e4rdning av standardv\u00e4rden<\/td><\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Gl\u00f6m inte att k\u00f6ra <code>sudo sshd -t<\/code> och ladda om efter \u00e4ndringen. S\u00e4tter du f\u00f6r restriktiva algoritmer kan \u00e4ldre klienter tappa anslutningen, s\u00e5 testa fr\u00e5n alla maskiner du beh\u00f6ver komma \u00e5t.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-9-begransa-atkomst\">Steg 9: Begr\u00e4nsa \u00e5tkomst och f\u00f6rs\u00f6k<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Med l\u00f6senord avst\u00e4ngt \u00e4r det redan sv\u00e5rt att ta sig in, men vi kan minska attackytan ytterligare. L\u00e4gg till i <code>sshd_config<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>AllowUsers sam deploy\nMaxAuthTries 3\nLoginGraceTime 20\nMaxSessions 4\nMaxStartups 10:30:60\nX11Forwarding no\nAllowAgentForwarding no<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>AllowUsers<\/code> \u00e4r en vitlista: bara de namngivna kontona f\u00e5r logga in, alla andra nekas direkt. <code>MaxAuthTries 3<\/code> bryter anslutningen efter tre misslyckade f\u00f6rs\u00f6k. <code>LoginGraceTime 20<\/code> ger bara tjugo sekunder att autentisera, vilket ocks\u00e5 mildrar s\u00e5rbarheter som regreSSHion (mer om den i avsnittet om k\u00e4nda hot). <code>X11Forwarding no<\/code> st\u00e4nger en funktion de flesta servrar inte beh\u00f6ver. Som alltid: testa med <code>sshd -t<\/code> och ladda om.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vill du flytta SSH till en annan port \u00e4n 22 kan du s\u00e4tta <code>Port 2222<\/code>. Det stoppar inte en riktad angripare, men minskar bruset fr\u00e5n automatiska skannrar avsev\u00e4rt. Kom ih\u00e5g att \u00f6ppna porten i brandv\u00e4ggen och uppdatera din klientkonfiguration.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-10-fail2ban\">Steg 10: Installera och konfigurera fail2ban<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">fail2ban l\u00e4ser serverns loggar och blockerar IP-adresser som g\u00f6r f\u00f6r m\u00e5nga misslyckade f\u00f6rs\u00f6k. Det \u00e4r ett reaktivt skydd, men en bra extra mur ovanp\u00e5 nyckelautentiseringen. Installera:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt update &amp;&amp; sudo apt install fail2ban -y<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Skapa en lokal konfiguration s\u00e5 att en paketuppdatering inte skriver \u00f6ver dina inst\u00e4llningar. Redigera <code>\/etc\/fail2ban\/jail.local<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[DEFAULT]\nbantime  = 1h\nfindtime = 10m\nmaxretry = 3\nbackend  = systemd\n\n[sshd]\nenabled = true\nport    = ssh\nmaxretry = 3<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Det betyder: tre misslyckade f\u00f6rs\u00f6k inom tio minuter ger en timmes bannlysning. M\u00e5nga v\u00e4ljer en l\u00e4ngre <code>bantime<\/code>, exempelvis <code>24h<\/code>, f\u00f6r att h\u00e5lla envisa angripare borta l\u00e4ngre. Starta tj\u00e4nsten och kontrollera status:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl enable --now fail2ban\nsudo fail2ban-client status sshd<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Utdata visar hur m\u00e5nga IP-adresser som blockerats:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Status for the jail: sshd\n|- Filter\n|  |- Currently failed: 2\n|  |- Total failed:     148\n|  `- File list:        \/var\/log\/auth.log\n`- Actions\n   |- Currently banned: 5\n   |- Total banned:     37\n   `- Banned IP list:   203.0.113.44 198.51.100.7 ...<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Siffrorna under &#8220;Total failed&#8221; och &#8220;Total banned&#8221; ger en k\u00e4nsla f\u00f6r hur mycket automatisk trafik en exponerad server faktiskt uts\u00e4tts f\u00f6r. F\u00f6r n\u00e4tverksh\u00e4rdning i stort, se v\u00e5r guide om <a href=\"https:\/\/shattered.io\/se\/2026\/06\/12\/wireguard-vpn-egen-server\/\">WireGuard VPN p\u00e5 egen server<\/a>, ett \u00e4nnu starkare s\u00e4tt att g\u00f6mma SSH bakom en VPN.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-11-ssh-agent\">Steg 11: Anv\u00e4nd ssh-agent f\u00f6r bekv\u00e4m nyckelhantering<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En l\u00f6senfras \u00e4r s\u00e4ker men kan k\u00e4nnas omst\u00e4ndlig om du loggar in ofta. ssh-agent l\u00f6ser det genom att h\u00e5lla din uppl\u00e5sta nyckel i minnet under sessionen, s\u00e5 du bara skriver l\u00f6senfrasen en g\u00e5ng. Starta agenten och l\u00e4gg till nyckeln:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>eval \"$(ssh-agent -s)\"\nssh-add ~\/.ssh\/id_ed25519<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">P\u00e5 de flesta skrivbordsmilj\u00f6er startar agenten automatiskt. Med <code>AddKeysToAgent yes<\/code> i klientkonfigurationen (steg 6) l\u00e4ggs nyckeln till f\u00f6rsta g\u00e5ngen du anv\u00e4nder den. Lista laddade nycklar med <code>ssh-add -l<\/code> och ta bort alla med <code>ssh-add -D<\/code> n\u00e4r du \u00e4r klar f\u00f6r dagen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En varning om agentvidarebefordran (<code>ForwardAgent<\/code>): den l\u00e5ter en fj\u00e4rrserver anv\u00e4nda din lokala nyckel, men en komprometterad server kan d\u00e5 missbruka den. Anv\u00e4nd hellre <code>ProxyJump<\/code> (se avancerade tips) som \u00e4r s\u00e4krare. Vi satte d\u00e4rf\u00f6r <code>AllowAgentForwarding no<\/code> p\u00e5 servern i steg 9.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"steg-12-test-och-rollback\">Steg 12: Sluttest och s\u00e4ker \u00e5terst\u00e4llning<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Sista steget \u00e4r att verifiera helheten och veta hur du tar dig tillbaka om n\u00e5got g\u00e5r fel. K\u00f6r en fullst\u00e4ndig kontroll fr\u00e5n en ny terminal:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Logga in med nyckel: <code>ssh webbserver<\/code> ska fungera utan serverl\u00f6senord.<\/li>\n<li>Bekr\u00e4fta att l\u00f6senord nekas: <code>ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no sam@192.0.2.10<\/code> ska avvisas.<\/li>\n<li>Kontrollera fail2ban: <code>sudo fail2ban-client status sshd<\/code> ska visa jail som aktiv.<\/li>\n<li>Verifiera algoritmer: <code>ssh -v webbserver 2>&amp;1 | grep \"kex:\"<\/code> ska visa mlkem768x25519-sha256.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Skulle du av misstag l\u00e5sa ute dig sj\u00e4lv: anv\u00e4nd molnleverant\u00f6rens webbkonsol eller fysisk konsol\u00e5tkomst, redigera <code>\/etc\/ssh\/sshd_config<\/code> tillbaka till <code>PasswordAuthentication yes<\/code>, k\u00f6r <code>sudo systemctl reload ssh<\/code> och b\u00f6rja om. Det \u00e4r just d\u00e4rf\u00f6r du alltid ska ha en andra session \u00f6ppen under konfigurationen. Med allt gr\u00f6nt har du en server som motst\u00e5r praktiskt taget alla automatiska SSH-attacker.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"komplett-sshd-config\">Komplett, h\u00e4rdad sshd_config<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">H\u00e4r \u00e4r hela projektet samlat: en f\u00e4rdig serverkonfiguration som kombinerar alla steg. Anpassa <code>AllowUsers<\/code> och eventuell <code>Port<\/code> efter din milj\u00f6, k\u00f6r <code>sudo sshd -t<\/code> och ladda om.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \/etc\/ssh\/sshd_config - h\u00e4rdad f\u00f6r 2026\n# Autentisering\nPubkeyAuthentication yes\nPasswordAuthentication no\nKbdInteractiveAuthentication no\nChallengeResponseAuthentication no\nPermitRootLogin prohibit-password\nPermitEmptyPasswords no\nUsePAM yes\n\n# \u00c5tkomst och gr\u00e4nser\nAllowUsers sam deploy\nMaxAuthTries 3\nLoginGraceTime 20\nMaxSessions 4\nMaxStartups 10:30:60\n\n# Moderna, kvants\u00e4kra algoritmer\nKexAlgorithms mlkem768x25519-sha256,sntrup761x25519-sha256,curve25519-sha256\nCiphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com\nMACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com\nHostKeyAlgorithms ssh-ed25519,rsa-sha2-512\n\n# St\u00e4ng av on\u00f6diga funktioner\nX11Forwarding no\nAllowAgentForwarding no\nAllowTcpForwarding no\nPrintMotd no\n\n# Loggning f\u00f6r fail2ban och granskning\nLogLevel VERBOSE<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>LogLevel VERBOSE<\/code> loggar fingeravtrycket p\u00e5 den nyckel som anv\u00e4nts vid varje inloggning, vilket \u00e4r guld vid en granskning. Med den h\u00e4r filen och fail2ban p\u00e5 plats har du en konfiguration som ligger steget f\u00f6re de allra flesta servrar p\u00e5 n\u00e4tet.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"brandvagg-ufw\">\u00d6ppna r\u00e4tt port i brandv\u00e4ggen med ufw<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En h\u00e4rdad SSH-tj\u00e4nst hj\u00e4lper f\u00f6ga om brandv\u00e4ggen l\u00e4mnar allt annat \u00f6ppet. P\u00e5 Ubuntu och Debian \u00e4r <code>ufw<\/code> (Uncomplicated Firewall) det enklaste verktyget. Tanken \u00e4r att neka all inkommande trafik som standard och bara sl\u00e4ppa in det du faktiskt beh\u00f6ver, vilket krymper attackytan dramatiskt.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo ufw default deny incoming\nsudo ufw default allow outgoing\nsudo ufw allow OpenSSH\nsudo ufw enable\nsudo ufw status verbose<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Profilen <code>OpenSSH<\/code> \u00f6ppnar port 22. Flyttade du SSH till en egen port i steg 9 anger du i st\u00e4llet portnumret direkt, exempelvis <code>sudo ufw allow 2222\/tcp<\/code>. Statuskontrollen visar de aktiva reglerna:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Status: active\nLogging: on (low)\nDefault: deny (incoming), allow (outgoing)\n\nTo                         Action      From\n--                         ------      ----\n22\/tcp (OpenSSH)           ALLOW IN    Anywhere\n22\/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Vill du begr\u00e4nsa SSH till ett enda kontorsn\u00e4t kan du l\u00e5sa regeln till en IP eller ett subn\u00e4t: <code>sudo ufw allow from 203.0.113.0\/24 to any port 22 proto tcp<\/code>. En s\u00e5dan k\u00e4llbegr\u00e4nsning \u00e4r ett av de mest effektiva enskilda skydden, eftersom skannrar fr\u00e5n resten av internet d\u00e5 aldrig ens n\u00e5r tj\u00e4nsten. Kombinera det g\u00e4rna med att g\u00f6mma SSH bakom en <a href=\"https:\/\/shattered.io\/se\/2026\/06\/12\/wireguard-vpn-egen-server\/\">WireGuard-VPN<\/a>, s\u00e5 att port 22 inte \u00e4r exponerad mot internet alls.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Gl\u00f6m inte att verifiera att du fortfarande kommer in efter <code>ufw enable<\/code>. Precis som med <code>sshd_config<\/code> g\u00e4ller principen att h\u00e5lla en andra session \u00f6ppen tills du bekr\u00e4ftat att den nya regelupps\u00e4ttningen sl\u00e4pper in dig. En felaktig brandv\u00e4ggsregel kan l\u00e5sa ute dig lika effektivt som en felaktig SSH-konfiguration.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"sakerhetskopiera-rotera\">S\u00e4kerhetskopiera och rotera dina nycklar<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00f6rlorar du din privata nyckel utan en kopia f\u00f6rlorar du \u00e5tkomsten till varje server d\u00e4r den ligger. S\u00e4kerhetskopiera d\u00e4rf\u00f6r nyckelparet p\u00e5 ett s\u00e4kert s\u00e4tt, inte i en oskyddad molnmapp. Ett krypterat USB-minne eller en post i din l\u00f6senordshanterare fungerar bra. T\u00e4nk p\u00e5 att en kopia av en privat nyckel \u00e4r lika k\u00e4nslig som originalet och ska skyddas lika h\u00e5rt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Rotera nycklar med j\u00e4mna mellanrum, exempelvis en g\u00e5ng om \u00e5ret, eller omedelbart vid minsta misstanke om att en dator komprometterats. Rotationen \u00e4r okomplicerad: generera ett nytt par, l\u00e4gg till den nya publika nyckeln p\u00e5 servrarna, verifiera att inloggning fungerar, och ta sedan bort den gamla raden ur <code>authorized_keys<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># 1. Generera ny nyckel\nssh-keygen -t ed25519 -a 100 -f ~\/.ssh\/id_ed25519_ny -C \"sam@laptop-2026-ny\"\n\n# 2. Distribuera den nya publika nyckeln\nssh-copy-id -i ~\/.ssh\/id_ed25519_ny.pub sam@192.0.2.10\n\n# 3. Verifiera att den nya nyckeln fungerar\nssh -i ~\/.ssh\/id_ed25519_ny sam@192.0.2.10\n\n# 4. Ta bort den gamla nyckelns rad ur authorized_keys p\u00e5 servern<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Vill du granska vilka nycklar som faktiskt ligger p\u00e5 en server kan du l\u00e4sa <code>authorized_keys<\/code> direkt: <code>cat ~\/.ssh\/authorized_keys<\/code>. J\u00e4mf\u00f6r fingeravtrycken med dina egna nycklar via <code>ssh-keygen -lf ~\/.ssh\/id_ed25519.pub<\/code>. Hittar du en rad du inte k\u00e4nner igen ska du behandla det som ett m\u00f6jligt intr\u00e5ng, ta bort raden direkt och granska serverns loggar.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ssh-windows\">SSH-nycklar p\u00e5 Windows<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Windows 10 och 11 har en inbyggd OpenSSH-klient, s\u00e5 kommandona i den h\u00e4r guiden fungerar direkt i PowerShell eller Terminal. Nycklar hamnar i <code>C:\\Users\\&lt;namn&gt;\\.ssh\\<\/code>. Anv\u00e4nder du PuTTY i st\u00e4llet hanteras nycklar i PuTTYgen-format (.ppk), och du kan importera en befintlig ed25519-nyckel via menyn Conversions. F\u00f6r de flesta r\u00e4cker den inbyggda klienten, som beter sig exakt som p\u00e5 Linux och macOS, inklusive <code>ssh-copy-id<\/code> i nyare versioner.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"vanliga-fallgropar\">Vanliga fallgropar att undvika<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c4ven enkla SSH-upps\u00e4ttningar g\u00e5r ofta fel p\u00e5 samma punkter. H\u00e4r \u00e4r de vanligaste misstagen och hur du undviker dem.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>St\u00e4nger av l\u00f6senord innan nyckeln testats.<\/strong> Bekr\u00e4fta alltid att <code>Authentication succeeded (publickey)<\/code> dyker upp (steg 5) innan du s\u00e4tter <code>PasswordAuthentication no<\/code>. Annars riskerar du att l\u00e5sa ute dig.<\/li>\n<li><strong>Fel filr\u00e4ttigheter.<\/strong> OpenSSH ignorerar tyst en <code>authorized_keys<\/code> eller privat nyckel som \u00e4r f\u00f6r \u00f6ppen. Kontrollera 700 p\u00e5 <code>~\/.ssh<\/code>, 600 p\u00e5 privata nycklar och 600 p\u00e5 <code>authorized_keys<\/code>.<\/li>\n<li><strong>En fil i sshd_config.d skriver \u00f6ver dina v\u00e4rden.<\/strong> P\u00e5 Ubuntu och Debian inkluderas <code>\/etc\/ssh\/sshd_config.d\/*.conf<\/code>, och en molnleverant\u00f6rs fil d\u00e4r kan \u00e5teraktivera l\u00f6senord. Kontrollera med <code>sudo sshd -T | grep -i passwordauthentication<\/code>.<\/li>\n<li><strong>Gl\u00f6mmer ladda om tj\u00e4nsten.<\/strong> \u00c4ndringar i <code>sshd_config<\/code> g\u00e4ller f\u00f6rst efter <code>systemctl reload ssh<\/code>. Befintliga sessioner p\u00e5verkas inte, vilket \u00e4r bra, men nya f\u00f6ljer den nya konfigurationen.<\/li>\n<li><strong>Privat nyckel utan l\u00f6senfras p\u00e5 en b\u00e4rbar dator.<\/strong> Tappar du datorn ligger nyckeln \u00f6ppen. S\u00e4tt alltid en l\u00f6senfras och anv\u00e4nd ssh-agent f\u00f6r bekv\u00e4mligheten.<\/li>\n<li><strong>Samma nyckel p\u00e5 alla maskiner.<\/strong> Anv\u00e4nd separata nycklar per dator. Blir en stulen beh\u00f6ver du bara \u00e5terkalla den ena ur <code>authorized_keys<\/code>, inte byta \u00f6verallt.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"felsokning\">Fels\u00f6kning: \u00e5tta vanliga problem<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e4r inloggningen inte fungerar \u00e4r <code>ssh -v<\/code> din b\u00e4sta v\u00e4n. Tabellen listar de vanligaste felmeddelandena och deras l\u00f6sning.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Symptom<\/th><th>Trolig orsak<\/th><th>L\u00f6sning<\/th><\/tr><\/thead><tbody>\n<tr><td>Permission denied (publickey)<\/td><td>Nyckeln saknas eller fel r\u00e4ttigheter p\u00e5 authorized_keys<\/td><td>Kontrollera 600 p\u00e5 authorized_keys, 700 p\u00e5 ~\/.ssh, r\u00e4tt \u00e4gare<\/td><\/tr>\n<tr><td>Fr\u00e5gar fortfarande efter l\u00f6senord<\/td><td>Servern hittar inte nyckeln eller fel anv\u00e4ndarnamn<\/td><td>K\u00f6r ssh -v och kontrollera att r\u00e4tt IdentityFile erbjuds<\/td><\/tr>\n<tr><td>Too many authentication failures<\/td><td>ssh-agent erbjuder f\u00f6r m\u00e5nga nycklar<\/td><td>L\u00e4gg till IdentitiesOnly yes i ~\/.ssh\/config<\/td><\/tr>\n<tr><td>Connection refused<\/td><td>sshd k\u00f6r inte eller fel port<\/td><td>Kontrollera systemctl status ssh och brandv\u00e4ggens portregel<\/td><\/tr>\n<tr><td>Connection timed out<\/td><td>Brandv\u00e4gg eller s\u00e4kerhetsgrupp blockerar porten<\/td><td>\u00d6ppna porten i molnets s\u00e4kerhetsgrupp och i ufw<\/td><\/tr>\n<tr><td>Host key verification failed<\/td><td>Serverns v\u00e4rdnyckel har \u00e4ndrats<\/td><td>Verifiera att det \u00e4r r\u00e4tt server, ta bort gammal rad med ssh-keygen -R<\/td><\/tr>\n<tr><td>no matching key exchange method<\/td><td>F\u00f6r restriktiva KexAlgorithms mot \u00e4ldre klient<\/td><td>L\u00e4gg till curve25519-sha256 eller uppdatera klienten<\/td><\/tr>\n<tr><td>Agent admitted failure to sign<\/td><td>Nyckeln \u00e4r inte laddad i agenten<\/td><td>K\u00f6r ssh-add ~\/.ssh\/id_ed25519 och kontrollera med ssh-add -l<\/td><\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ett sista tips: serverns loggar avsl\u00f6jar ofta orsaken direkt. K\u00f6r <code>sudo journalctl -u ssh -f<\/code> p\u00e5 servern medan du f\u00f6rs\u00f6ker logga in, s\u00e5 ser du exakt varf\u00f6r ett f\u00f6rs\u00f6k avvisas. Vid problem med fel filr\u00e4ttigheter loggar sshd typiskt &#8220;Authentication refused: bad ownership or modes&#8221;.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"kanda-hot\">K\u00e4nda SSH-hot du b\u00f6r k\u00e4nna till<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">SSH \u00e4r robust, men implementeringar har haft allvarliga s\u00e5rbarheter de senaste \u00e5ren. Att k\u00e4nna till dem hj\u00e4lper dig f\u00f6rst\u00e5 varf\u00f6r uppdateringar och korta tidsgr\u00e4nser spelar roll.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>regreSSHion (CVE-2024-6387)<\/strong> avsl\u00f6jades av Qualys i juli 2024 och \u00e4r en s\u00e4llsynt allvarlig sak: ett kappl\u00f6pningsfel i sshd:s signalhanterare som kan ge oautentiserad fj\u00e4rrk\u00f6rning av kod som root p\u00e5 glibc-baserade Linux-system. Den fick CVSS-po\u00e4ngen 8.1 och drabbade en rad OpenSSH-versioner i 8.5p1-serien och fram\u00e5t p\u00e5 s\u00e5rbara byggen. F\u00f6rsvaret \u00e4r att h\u00e5lla OpenSSH uppdaterat och att korta <code>LoginGraceTime<\/code>, eftersom buggen utnyttjar tidsf\u00f6nstret innan autentisering.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Terrapin (CVE-2023-48795)<\/strong> \u00e4r en attack mot sj\u00e4lva SSH-transportlagret. Genom att manipulera sekvensnummer i handskakningen kan en angripare i mitten klippa bort meddelanden och tysta nedgradera s\u00e4kerheten i vissa algoritmkombinationer. Det \u00e4r inte en l\u00f6senords- eller nyckell\u00e4cka, utan en integritetsbrist. Den \u00e5tg\u00e4rdas genom uppdaterad OpenSSH p\u00e5 b\u00e5da sidor och genom att f\u00f6redra moderna AEAD-krypton som vi satte i steg 8.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>S\u00e5rbarhet<\/th><th>CVE<\/th><th>Typ<\/th><th>F\u00f6rsvar<\/th><\/tr><\/thead><tbody>\n<tr><td>regreSSHion<\/td><td>CVE-2024-6387<\/td><td>Oautentiserad RCE som root (CVSS 8.1)<\/td><td>Uppdatera OpenSSH, korta LoginGraceTime<\/td><\/tr>\n<tr><td>Terrapin<\/td><td>CVE-2023-48795<\/td><td>Nedgradering av transportintegritet<\/td><td>Uppdatera b\u00e5da sidor, moderna AEAD-krypton<\/td><\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">L\u00e4rdomen \u00e4r enkel: nyckelautentisering skyddar mot gissning, men bara uppdaterad mjukvara skyddar mot s\u00e5rbarheter i sj\u00e4lva koden. H\u00e5ll <code>openssh-server<\/code> uppdaterat, g\u00e4rna med automatiska s\u00e4kerhetsuppdateringar via <code>unattended-upgrades<\/code> p\u00e5 Debian och Ubuntu.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"avancerade-tips\">Avancerade tips f\u00f6r proffs<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"hardvarunycklar\">H\u00e5rdvarunycklar med FIDO2<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00f6r den h\u00f6gsta s\u00e4kerhetsniv\u00e5n kan du binda nyckeln till en fysisk s\u00e4kerhetsnyckel som en YubiKey. Den privata nyckeln l\u00e4mnar d\u00e5 aldrig h\u00e5rdvaran, och du m\u00e5ste r\u00f6ra vid enheten f\u00f6r varje inloggning:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh-keygen -t ed25519-sk -O resident -O verify-required<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Suffixet <code>-sk<\/code> st\u00e5r f\u00f6r security key. <code>verify-required<\/code> kr\u00e4ver dessutom en PIN-kod. \u00c4ven om n\u00e5gon stj\u00e4l b\u00e5de datorn och nyckelfilen kan de inte logga in utan den fysiska enheten.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"proxyjump\">Hoppa via bastionv\u00e4rd med ProxyJump<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">I milj\u00f6er d\u00e4r interna servrar bara n\u00e5s via en bastionv\u00e4rd slipper du dubbla inloggningar med <code>ProxyJump<\/code> i klientkonfigurationen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Host intern-db\n    HostName 10.0.1.20\n    User sam\n    ProxyJump bastion.example.com\n    IdentityFile ~\/.ssh\/id_ed25519<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">D\u00e5 tunnlar SSH automatiskt genom bastionv\u00e4rden utan att din privata nyckel n\u00e5gonsin landar p\u00e5 den, vilket \u00e4r s\u00e4krare \u00e4n agentvidarebefordran.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ssh-certifikat\">SSH-certifikat i st\u00f6rre milj\u00f6er<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e4r du hanterar dussintals servrar blir <code>authorized_keys<\/code> oh\u00e5llbart. SSH-certifikat l\u00e5ter dig signera anv\u00e4ndarnycklar med en betrodd CA och s\u00e4tta utg\u00e5ngstid, s\u00e5 du slipper kopiera nycklar manuellt. Det bygger p\u00e5 samma matematik som <a href=\"https:\/\/shattered.io\/se\/2026\/06\/10\/digitala-signaturer\/\">digitala signaturer<\/a> och \u00e4r hur stora organisationer skalar SSH s\u00e4kert.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"faq\">Vanliga fr\u00e5gor om SSH-nycklar<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ar-ssh-nycklar-sakrare-an-losenord\">\u00c4r SSH-nycklar s\u00e4krare \u00e4n l\u00f6senord?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ja, betydligt. En ed25519-nyckel har en s\u00e4kerhetsniv\u00e5 runt 128 bitar, motsvarande ett slumpm\u00e4ssigt l\u00f6senord p\u00e5 drygt 20 tecken, och den skickas aldrig \u00f6ver n\u00e4tverket. L\u00f6senord kan gissas med ordlistor och f\u00e5ngas upp; nycklar kan inte forceras med rimliga resurser. N\u00e4r du dessutom st\u00e4nger av l\u00f6senordsinloggning eliminerar du brute force helt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"behover-jag-en-losenfras-pa-min-ssh-nyckel\">Beh\u00f6ver jag en l\u00f6senfras p\u00e5 min SSH-nyckel?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ja, p\u00e5 alla nycklar som lagras p\u00e5 en dator du b\u00e4r med dig eller som kan stj\u00e4las. L\u00f6senfrasen krypterar den privata nyckelfilen s\u00e5 att en stulen fil \u00e4r v\u00e4rdel\u00f6s. Med ssh-agent skriver du l\u00f6senfrasen bara en g\u00e5ng per session, s\u00e5 det blir inte omst\u00e4ndligt. F\u00f6r automatiserade tj\u00e4nstekonton anv\u00e4nds ibland nycklar utan l\u00f6senfras, men d\u00e5 b\u00f6r de begr\u00e4nsas h\u00e5rt med <code>command=<\/code> och IP-restriktioner i authorized_keys.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ed25519-eller-rsa-vilken-ska-jag-valja-2026\">ed25519 eller RSA, vilken ska jag v\u00e4lja 2026?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">V\u00e4lj ed25519 f\u00f6r alla nya nycklar. Den \u00e4r snabbare, ger kortare nycklar och har inga av de implementeringssvagheter som drabbat ECDSA. RSA beh\u00f6vs bara om du m\u00e5ste prata med mycket gammal utrustning, och d\u00e5 ska du anv\u00e4nda minst 3072 bitar, helst 4096.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"vad-ar-kvantsakert-nyckelutbyte-i-ssh\">Vad \u00e4r kvants\u00e4kert nyckelutbyte i SSH?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Det \u00e4r ett hybridutbyte, <code>mlkem768x25519-sha256<\/code>, som kombinerar klassisk Curve25519 med den NIST-standardiserade kvants\u00e4kra algoritmen ML-KEM. Det skyddar mot framtida kvantdatorer och mot &#8220;sk\u00f6rda nu, dekryptera sedan&#8221;-attacker. OpenSSH 10.0 gjorde det till standard 2025, s\u00e5 du f\u00e5r skyddet automatiskt p\u00e5 moderna system.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"hur-tar-jag-bort-atkomst-for-en-gammal-nyckel\">Hur tar jag bort \u00e5tkomst f\u00f6r en gammal nyckel?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ta bort motsvarande rad ur <code>~\/.ssh\/authorized_keys<\/code> p\u00e5 servern. Nyckeln slutar fungera omedelbart f\u00f6r nya anslutningar. D\u00e4rf\u00f6r \u00e4r det klokt att ha separata nycklar per dator: blir en stulen \u00e5terkallar du bara den raden utan att p\u00e5verka dina andra maskiner.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"kan-jag-anvanda-samma-ssh-nyckel-pa-flera-servrar\">Kan jag anv\u00e4nda samma SSH-nyckel p\u00e5 flera servrar?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Tekniskt ja, du l\u00e4gger samma publika nyckel i authorized_keys p\u00e5 varje server. Det \u00e4r vanligt och s\u00e4kert s\u00e5 l\u00e4nge den privata nyckeln skyddas v\u00e4l. D\u00e4remot b\u00f6r du ha olika nycklar per <em>klientdator<\/em>, inte per server, s\u00e5 att en komprometterad laptop bara p\u00e5verkar sina egna anslutningar.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"varfor-nekas-jag-fortfarande-efter-att-jag-lagt-till-nyckeln\">Varf\u00f6r nekas jag fortfarande efter att jag lagt till nyckeln?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e4stan alltid handlar det om filr\u00e4ttigheter eller \u00e4garskap. OpenSSH ignorerar tyst en <code>authorized_keys<\/code> som \u00e4r skrivbar f\u00f6r andra. Kontrollera 700 p\u00e5 <code>~\/.ssh<\/code> och 600 p\u00e5 <code>authorized_keys<\/code>, att r\u00e4tt anv\u00e4ndare \u00e4ger filerna, och k\u00f6r <code>ssh -v<\/code> f\u00f6r att se exakt var det stoppar. Serverns logg via <code>journalctl -u ssh<\/code> avsl\u00f6jar ofta orsaken p\u00e5 en rad.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"racker-fail2ban-som-skydd\">R\u00e4cker fail2ban som skydd?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Nej, fail2ban \u00e4r ett reaktivt komplement, inte ett prim\u00e4rt f\u00f6rsvar. Den blockerar IP-adresser efter misslyckade f\u00f6rs\u00f6k, men det effektiva skyddet \u00e4r att st\u00e4nga av l\u00f6senord helt s\u00e5 att det inte finns n\u00e5got att gissa. Anv\u00e4nd fail2ban ovanp\u00e5 nyckelautentisering, inte i st\u00e4llet f\u00f6r den.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"relaterad-lasning\">Relaterad l\u00e4sning<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/shattered.io\/se\/2026\/06\/12\/wireguard-vpn-egen-server\/\">WireGuard VPN: egen server i 12 steg, 30 min [2026]<\/a><\/li>\n<li><a href=\"https:\/\/shattered.io\/se\/2026\/06\/13\/pgp-kryptering-gpg\/\">PGP-kryptering med GPG: e-post i 12 steg [2026]<\/a><\/li>\n<li><a href=\"https:\/\/shattered.io\/se\/2026\/06\/14\/veracrypt-kryptera-disk\/\">VeraCrypt: kryptera en disk i 12 steg [2026]<\/a><\/li>\n<li><a href=\"https:\/\/shattered.io\/se\/2026\/06\/10\/losenordssakerhet\/\">L\u00f6senordss\u00e4kerhet: l\u00e4ngd, hashning och l\u00f6senordshanterare<\/a><\/li>\n<li><a href=\"https:\/\/shattered.io\/se\/2026\/06\/10\/digitala-signaturer\/\">Digitala signaturer: hashfunktioner och asymmetriska nycklar<\/a><\/li>\n<li><a href=\"https:\/\/shattered.io\/se\/2026\/06\/10\/https-och-tls\/\">HTTPS och TLS: h\u00e4ngl\u00e5set, certifikat och vad de skyddar<\/a><\/li>\n<li><a href=\"https:\/\/shattered.io\/se\/2026\/06\/10\/security-hub\/\">Cybers\u00e4kerhet: nav f\u00f6r guider och analyser<\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Externa k\u00e4llor: <a href=\"https:\/\/www.openssh.com\/releasenotes.html\" target=\"_blank\" rel=\"noopener\">OpenSSH Release Notes<\/a>, <a href=\"https:\/\/www.openssh.com\/txt\/release-10.0\" target=\"_blank\" rel=\"noopener\">OpenSSH 10.0<\/a>, <a href=\"https:\/\/www.qualys.com\/2024\/07\/01\/cve-2024-6387\/regresshion.txt\" target=\"_blank\" rel=\"noopener\">Qualys regreSSHion-r\u00e5dgivning (CVE-2024-6387)<\/a>, <a href=\"https:\/\/terrapin-attack.com\/\" target=\"_blank\" rel=\"noopener\">Terrapin Attack (CVE-2023-48795)<\/a> och <a href=\"https:\/\/man.openbsd.org\/sshd_config\" target=\"_blank\" rel=\"noopener\">OpenBSD sshd_config-manual<\/a>.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>L\u00f6senord \u00e4r den svagaste l\u00e4nken i n\u00e4stan varje serverintr\u00e5ng. Angripare k\u00f6r automatiserade ordlistor mot port 22 dygnet runt, och en exponerad server ser ofta tusentals inloggningsf\u00f6rs\u00f6k per dygn redan f\u00f6rsta\u2026<\/p>\n","protected":false},"author":3,"featured_media":85,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,3],"tags":[],"class_list":["post-84","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-10","category-security"],"_links":{"self":[{"href":"https:\/\/shattered.io\/se\/wp-json\/wp\/v2\/posts\/84","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/shattered.io\/se\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/shattered.io\/se\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/shattered.io\/se\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/shattered.io\/se\/wp-json\/wp\/v2\/comments?post=84"}],"version-history":[{"count":1,"href":"https:\/\/shattered.io\/se\/wp-json\/wp\/v2\/posts\/84\/revisions"}],"predecessor-version":[{"id":86,"href":"https:\/\/shattered.io\/se\/wp-json\/wp\/v2\/posts\/84\/revisions\/86"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/shattered.io\/se\/wp-json\/wp\/v2\/media\/85"}],"wp:attachment":[{"href":"https:\/\/shattered.io\/se\/wp-json\/wp\/v2\/media?parent=84"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/shattered.io\/se\/wp-json\/wp\/v2\/categories?post=84"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/shattered.io\/se\/wp-json\/wp\/v2\/tags?post=84"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}