Hur kan du åtgärda ett "Permission denied (publickey)" SSH-fel på Linux?
SSH är ett användbart verktyg för att ansluta till fjärrmaskiner, men du kan stöta på ett “Permission denied (publickey)"-fel som involverar din offentliga nyckel på Linux. Lyckligtvis finns det några enkla lösningar som du kan prova för att felsöka.
Vad är en offentlig nyckel?
Att skapa ett nyckelpar för SSH på Linux innebär att man skapar både en offentlig nyckel och dess motsvarande privata motsvarighet. Den privata nyckeln skyddas noggrant av användaren, medan den offentliga nyckeln överförs till fjärrservrar för att underlätta säker inloggning utan lösenord. Vid försök att upprätta en anslutning verifierar SSH-klienten på det lokala systemet äktheten hos den offentliga nyckeln mot den privata nyckel som användaren har.
Den största fördelen med detta tillvägagångssätt är att det räcker med att avslöja den publika nyckeln. Så länge man håller sin privata nyckel hemlig är man skyddad även om den publika nyckeln blir känd, eftersom den senare skulle vara fruktlös utan den förra.
För att OpenSSH, en vanlig klient- och serverlösning med öppen källkod, ska fungera korrekt måste specifika behörigheter ges till en viss fil i användarens hemkatalog (.ssh/authorized\_keys). Filen får inte ha skrivbehörigheter som är konfigurerade för andra användare än ägaren, vilket kallas “world-writable”, eftersom systemet annars inte kommer att fungera korrekt. På grund av den inledande punkten före katalognamnet kommer den här filen inte att visas i standardlistor över filer med vanliga kommandon som “ls”, vilket gör det nödvändigt att använda det mer inkluderande kommandot “ls -A” följt av “.
Ändring av behörigheter kan förekomma när en fil överförs från en enhet till en annan eller skapas på ditt nuvarande system. Att justera dessa inställningar är dock enkelt och kan göras snabbt.
Kontrollera behörigheterna för dina offentliga nycklar
Filen authorized\_keys är en textfil som innehåller de offentliga nycklarna för klienter som man vill ge åtkomst till deras konto på fjärrsystemet. För att visa dess behörigheter räcker det att använda kommandot “ls” tillsammans med alternativet “-l”.
ls -l ~/.ssh/authorized_keys
I den här konfigurationen visas de behörighetsparametrar som gäller för ägaren, församlingen och ytterligare användare. Det är viktigt att granska de sista sex tecknen i taggen. Förekomsten av ett “w” innebär att kollektivet eller ospecificerade individer har befogenhet att skriva på den, vilket gör arrangemanget känsligt för säkerhetsrisker.
För att ge dig själv behörighet att skriva till en viss fil och samtidigt begränsa åtkomsten för andra användare i samma grupp och utanför gruppen, kan du använda kommandot “chmod” i terminalen. Detta gör att du kan ändra filens behörigheter i enlighet med detta och säkerställa att endast behöriga personer har åtkomst till filen.
Det finns två sätt: numeriskt och symboliskt.
Ett alternativt tillvägagångssätt är att använda numeriska värden för att representera filbehörigheter, vilket kräver att man memorerar oktalnumreringen för specifika behörigheter.
chmod 700 ~/.ssh/authorized_keys
Den symboliska metoden är mer minnesvärd:
chmod go-w ~/.ssh/authorized_keys
Kopiera nycklar säkert med ssh-agent
Programmet ssh-agent rekommenderas starkt för att skydda känslig information som privata nycklar som används vid SSH-autentisering. Denna metod eliminerar behovet av att manuellt ange kommandoradskommandon eller oroa sig för potentiella behörighetsproblem som kan uppstå när man kopierar och klistrar in direkt i auktoriserade nyckelfiler.
Använd det här kommandot för att starta ssh-agent:
eval "$(ssh-agent-s)"
För att komma åt en fjärrserver med hjälp av en SSH-agent via kommandoradsgränssnittet, använd alternativet “-A” tillsammans med kommandot “ssh”.
ssh -A [email protected]
Kontrollera fjärrserverns sshd-inställningar
Om våra tidigare rekommendationer inte löser problemet kan en möjlig åtgärd vara att justera inställningarna för sshd-servern på fjärrenheten, förutsatt att du har administratörsbehörighet. Detta bör dock ses som en sista utväg eftersom sådana ändringar potentiellt kan äventyra säkerheten i ditt system. Om du inte kan ändra konfigurationen direkt måste du vända dig till den utsedda systemadministratören för att få hjälp med eventuella problem med att upprätta en SSH-anslutning.
Filen som innehåller de globala inställningarna för SSH-daemon (sshd) finns på “/etc/ssh/sshd\_config”. Den ägs av root-användaren och kräver administratörsbehörighet för att kunna öppnas eller ändras. För att göra ändringar med textredigeraren Vim kan man utföra kommandot “sudo vim /etc/ssh/sshd\_config” följt av att trycka på enter.
sudo vim /etc/ssh/sshd_config
För att sshd ska tillåta inloggning trots en offentligt tillgänglig authorized\_keys-fil, är det nödvändigt att konfigurera serverns konfigurationsfil genom att sätta parametern “StrictModes” till “no”.
Spara och starta om SSH-servern:
sudo systemctl restart sshd.service
Nu kan du åtgärda behörighetsfel för offentliga SSH-nycklar
I de fall problem uppstår med offentliga SSH-nycklar på externa system är det ofta tillräckligt att verifiera och justera filbehörigheterna för att säkerställa exklusivitet för din nyckel. Dessutom kan användning av en ssh-agent ge ökad säkerhet under anslutningsprocesser. Vid behov kan man dock överväga att lätta på SSH-serverns stelhet som en sista utväg.