Hoe repareer je een "Permission denied (publickey)" SSH-fout onder Linux?
SSH is een handig hulpmiddel om verbinding te maken met externe machines, maar het kan gebeuren dat je tegen een “Permission denied (publickey)” fout aanloopt met betrekking tot je publieke sleutel op Linux. Gelukkig zijn er enkele eenvoudige oplossingen die je kunt proberen om het probleem op te lossen.
Wat is een publieke sleutel?
Het genereren van een sleutelpaar voor SSH onder Linux houdt in dat je zowel een publieke sleutel als de corresponderende private tegenhanger maakt. De privésleutel wordt zorgvuldig beschermd door de gebruiker, terwijl de publieke sleutel wordt verzonden naar externe servers om veilig inloggen zonder wachtwoord mogelijk te maken. Wanneer geprobeerd wordt een verbinding op te zetten, verifieert de SSH-client op het lokale systeem de authenticiteit van de openbare sleutel met de privésleutel van de gebruiker.
Het belangrijkste voordeel van deze aanpak is dat het vrijgeven van de openbare sleutel voldoende is. Zolang iemand de vertrouwelijkheid van zijn privésleutel bewaart, blijft hij beschermd, zelfs als zijn openbare sleutel bekend wordt.
Om OpenSSH, een veelgebruikte open source client- en serveroplossing, goed te laten werken, moeten specifieke rechten worden toegekend aan een bepaald bestand in de thuismap van de gebruiker (.ssh/authorized\_keys). Het bestand mag geen schrijfrechten hebben voor andere gebruikers dan de eigenaar, ook wel “world-writable” genoemd, anders werkt het systeem niet goed. Met name vanwege de punt die voor de mapnaam staat, zal dit bestand niet verschijnen in standaard lijsten van bestanden met gewone commando’s zoals “ls”, waardoor het noodzakelijk is om het meer omvattende commando “ls -A” gevolgd door “.
Het wijzigen van permissies kan voorkomen wanneer een bestand van het ene apparaat naar het andere wordt overgezet of op je huidige systeem wordt gemaakt. Het aanpassen van deze instellingen is echter moeiteloos en kan direct worden gedaan.
Controleer uw publieke sleutelpermissies
Het bestand authorized\_keys is een tekstbestand dat de publieke sleutels bevat van clients die men toegang wil geven tot hun account op het externe systeem. Om de privileges te bekijken is het voldoende om het commando ’ls’ met de optie ‘-l’ te gebruiken.
ls -l ~/.ssh/authorized_keys
Deze configuratie toont de autorisatieparameters die van toepassing zijn op de eigenaar, de assembly en aanvullende gebruikers. Het is essentieel om de laatste zes tekens van de tag te onderzoeken. De aanwezigheid van een ‘w’ daarin betekent dat het collectief of niet gespecificeerde individuen gemachtigd zijn om erop te schrijven, waardoor de regeling gevoelig wordt voor veiligheidsrisico’s.
Om jezelf toestemming te geven om naar een bepaald bestand te schrijven en tegelijkertijd de toegang voor andere gebruikers in dezelfde groep en daarbuiten te beperken, kun je het commando “chmod” in je terminal gebruiken. Hiermee kun je de rechten van het bestand aanpassen, zodat alleen bevoegde personen toegang hebben tot het bestand.
Er zijn twee manieren: numeriek en symbolisch.
Een alternatieve aanpak is het gebruik van numerieke waarden om bestandspermissies weer te geven, waarvoor je octale nummering voor specifieke permissies moet onthouden.
chmod 700 ~/.ssh/authorized_keys
De symbolische methode is meer geheugensteuntje:
chmod go-w ~/.ssh/authorized_keys
Veilig sleutels kopiëren met ssh-agent
Het gebruik van het programma ssh-agent wordt sterk aangeraden voor het beveiligen van gevoelige informatie zoals privésleutels die gebruikt worden bij SSH-verificatie. Met deze methode is het niet meer nodig om handmatig commandoregelcommando’s in te voeren of je zorgen te maken over mogelijke toestemmingsproblemen die kunnen ontstaan bij het rechtstreeks kopiëren en plakken in geautoriseerde sleutelbestanden.
Gebruik dit commando om ssh-agent te starten:
eval "$(ssh-agent-s)"
Om toegang te krijgen tot een verre server met behulp van een SSH-agent via de commandoregelinterface, gebruikt u de “-A” keuze naast het “ssh”-commando.
ssh -A [email protected]
Controleer de sshd-instellingen van de externe server
In het geval dat onze vorige aanbevelingen het probleem niet oplossen, is het mogelijk om de instellingen van de sshd-server op het externe apparaat aan te passen, mits je beheerdersrechten hebt. Dit moet echter beschouwd worden als een laatste redmiddel, omdat het aanbrengen van dergelijke wijzigingen de veiligheid van uw systeem in gevaar kan brengen. In gevallen waarin het niet mogelijk is om de configuratie direct aan te passen, dient de aangewezen systeembeheerder ingeschakeld te worden om hardnekkige problemen met het maken van een SSH-verbinding op te lossen.
Het bestand met de globale instellingen voor de SSH daemon (sshd) staat in “/etc/ssh/sshd\_config”. Het is eigendom van de root gebruiker en vereist beheerdersrechten om het te openen of te wijzigen. Om wijzigingen aan te brengen met de teksteditor Vim kan het commando “sudo vim /etc/ssh/sshd\_config” uitgevoerd worden, gevolgd door een druk op enter.
sudo vim /etc/ssh/sshd_config
Om ervoor te zorgen dat sshd inloggen toestaat ondanks een publiek toegankelijk authorized\_keys bestand, is het nodig om het configuratiebestand van de server te configureren door de “StrictModes” parameter op “no” te zetten.
Sla het op en herstart de SSH-server:
sudo systemctl restart sshd.service
Nu kun je SSH openbare sleuteltoestemmingsfouten oplossen
In gevallen waar zich problemen voordoen met SSH openbare sleutels op externe systemen, is het vaak voldoende om de bestandsrechten te controleren en aan te passen om de exclusiviteit van je sleutel te garanderen. Daarnaast kan het gebruik van een ssh-agent zorgen voor verbeterde beveiliging tijdens verbindingsprocessen. Indien nodig kan echter versoepeling van de starheid van de SSH-server worden overwogen als laatste redmiddel.