Så här ställer du in SSH-nycklar på Ubuntu 16.04
introduktion
SSH, eller secure shell, är ett krypterat protokoll som används för att administrera och kommunicera med servrar. När du arbetar med en Ubuntu-server är chansen stor att du kommer att spendera större delen av din tid i en terminalsession ansluten till din server via SSH.
i den här guiden fokuserar vi på att ställa in SSH-nycklar för en vanilj Ubuntu 16.04-installation. SSH-nycklar ger ett enkelt och säkert sätt att logga in på din server och rekommenderas för alla användare.
Steg 1 — Skapa RSA-nyckelparet
det första steget är att skapa ett nyckelpar på klientmaskinen (vanligtvis din dator):
- ssh-keygen
som standardssh-keygen
skapar ett 2048-bitars RSA-nyckelpar, vilket är tillräckligt säkert för de flesta användningsfall (du kan eventuellt passera i flaggan-b 4096
för att skapa en större 4096-bitars nyckel).
När du har angett kommandot bör du se följande utdata:
OutputGenerating public/private rsa key pair.Enter file in which to save the key (/your_home/.ssh/id_rsa):
Tryck på ENTER
för att spara nyckelparet i underkatalogen .ssh/
I din hemkatalog, eller ange en alternativ sökväg.
Om du tidigare hade genererat ett SSH-nyckelpar kan du se följande fråga:
Output/home/your_home/.ssh/id_rsa already exists.Overwrite (y/n)?
om du väljer att skriva över nyckeln på disken kan du inte längre autentisera med föregående nyckel. Var mycket försiktig när du väljer Ja, eftersom det här är en destruktiv process som inte kan vändas.
Du bör då se följande prompt:
OutputEnter passphrase (empty for no passphrase):
Här kan du eventuellt ange en säker lösenfras, vilket rekommenderas starkt. En lösenfras lägger till ytterligare ett säkerhetslager för att förhindra att obehöriga användare loggar in. För att lära dig mer om säkerhet, se vår handledning om hur du konfigurerar SSH-nyckelbaserad autentisering på en Linux-Server.
Du bör då se följande utgång:
OutputYour identification has been saved in /your_home/.ssh/id_rsa.Your public key has been saved in /your_home/.ssh/id_rsa.pub.The key fingerprint is:a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_hostThe key's randomart image is:+------+| ..o || E o= . || o. o || .. || ..S || o o. || =o.+. ||. =++.. ||o=++. |+-----------------+
Du har nu en offentlig och privat nyckel som du kan använda för att autentisera. Nästa steg är att placera den offentliga nyckeln på din server så att du kan använda SSH-nyckelbaserad autentisering för att logga in.
steg 2-kopiera den offentliga nyckeln till Ubuntu Server
det snabbaste sättet att kopiera din offentliga nyckel till Ubuntu-värden är att använda ett verktyg som heter ssh-copy-id
. På grund av sin enkelhet rekommenderas denna metod starkt om den är tillgänglig. Om du inte har ssh-copy-id
tillgänglig för dig på din klientmaskin, kan du använda en av de två alternativa metoderna i det här avsnittet (kopiering via lösenordsbaserad SSH eller manuellt kopiering av nyckeln).
kopiera offentlig nyckel med ssh-copy-id
ssh-copy-id
verktyget ingår som standard i många operativsystem, så du kan ha det tillgängligt på ditt lokala system. För att den här metoden ska fungera måste du redan ha lösenordsbaserad SSH-åtkomst till din server.
för att använda verktyget behöver du bara ange fjärrvärden som du vill ansluta till och användarkontot som du har lösenord SSH-åtkomst till. Det här är det konto som din offentliga SSH-nyckel kommer att kopieras till.
syntaxen är:
- ssh-copy-id username@remote_host
Du kan se följande meddelande:
OutputThe authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.Are you sure you want to continue connecting (yes/no)? yes
det betyder att din lokala dator inte känner igen fjärrvärden. Detta kommer att hända första gången du ansluter till en ny värd. Skriv ”ja”och tryck på ENTER
för att fortsätta.
därefter skannar verktyget ditt lokala konto förid_rsa.pub
– tangenten som vi skapade tidigare. När den hittar nyckeln kommer den att be dig om lösenordet för fjärranvändarens konto:
Output/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new [email protected]'s password:
skriv in lösenordet (din typning visas inte av säkerhetsskäl) och tryck på ENTER
. Verktyget kommer att ansluta till kontot på fjärrvärden med det lösenord du angav. Den kopierar sedan innehållet i din~/.ssh/id_rsa.pub
nyckel till en fil i fjärrkontoets hem~/.ssh
katalog som heterauthorized_keys
.
Du bör se följande utgång:
OutputNumber of key(s) added: 1Now try logging into the machine, with: "ssh '[email protected]'"and check to make sure that only the key(s) you wanted were added.
vid denna tidpunkt har din id_rsa.pub
nyckel laddats upp till fjärrkontot. Du kan fortsätta till steg 3.
kopiera offentlig nyckel med SSH
Om du inte har ssh-copy-id
tillgänglig, men du har lösenordsbaserad SSH-åtkomst till ett konto på din server, kan du ladda upp dina nycklar med en konventionell SSH-metod.
Vi kan göra detta genom att använda kommandotcat
för att läsa innehållet i den offentliga SSH-tangenten på vår lokala dator och rör det via en SSH-anslutning till fjärrservern.
på andra sidan kan vi se till att katalogen ~/.ssh
finns och har rätt behörigheter under det konto vi använder.
Vi kan sedan mata ut innehållet vi piped över till en fil som heter authorized_keys
I den här katalogen. Vi använder >>
omdirigeringssymbolen för att lägga till innehållet istället för att skriva över det. Detta låter oss lägga till nycklar utan att förstöra tidigare tillagda nycklar.
det fullständiga kommandot ser ut så här:
- cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"
Du kan se följande meddelande:
OutputThe authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.Are you sure you want to continue connecting (yes/no)? yes
det betyder att din lokala dator inte känner igen fjärrvärden. Detta kommer att hända första gången du ansluter till en ny värd. Skriv ”ja”och tryck på ENTER
för att fortsätta.
efteråt bör du uppmanas att ange lösenordet för fjärranvändarkontot:
Output [email protected]'s password:
När du har angett ditt lösenord kopieras innehållet i din id_rsa.pub
– nyckel till slutet av authorized_keys
– fil på fjärranvändarens konto. Fortsätt till steg 3 om detta lyckades.
kopiera Public Key manuellt
Om du inte har lösenordsbaserad SSH-åtkomst till din server tillgänglig måste du slutföra ovanstående process manuellt.
vi lägger manuellt till innehållet i filen id_rsa.pub
till filen ~/.ssh/authorized_keys
på din fjärrmaskin.
för att visa innehållet i dinid_rsa.pub
nyckel, skriv detta i din lokala dator:
- cat ~/.ssh/id_rsa.pub
Du kommer att se nyckelns innehåll, vilket ska se ut så här:
Outputssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test
gå till din fjärrvärd med vilken metod du har tillgänglig.
När du har tillgång till ditt konto på fjärrservern bör du se till att katalogen ~/.ssh
finns. Detta kommando skapar katalogen om det behövs, eller gör ingenting om det redan finns:
- mkdir -p ~/.ssh
Nu kan du skapa eller ändra filen authorized_keys
I den här katalogen. Du kan lägga till innehållet i din id_rsa.pub
– fil till slutet av authorized_keys
– fil, skapa den om det behövs, med det här kommandot:
- echo public_key_string >> ~/.ssh/authorized_keys
i ovanstående kommando, ersätt public_key_string
med utgången från kommandot cat ~/.ssh/id_rsa.pub
som du körde på ditt lokala system. Det bör börja med ssh-rsa AAAA...
.
slutligen kommer vi att se till att ~/.ssh
katalog och authorized_keys
fil har lämpliga behörigheter set:
- chmod -R go= ~/.ssh
denna rekursivt tar bort alla” grupp ”och” andra”behörigheter för ~/.ssh/
katalog.
om du använder root
– kontot för att ställa in nycklar för ett användarkonto är det också viktigt att katalogen ~/.ssh
tillhör användaren och inte root
:
- chown -R sammy:sammy ~/.ssh
i denna handledning heter vår användare Sammy men du bör ersätta lämpligt användarnamn i ovanstående kommando.
Vi kan nu försöka lösenordslös autentisering med vår Ubuntu-server.
steg 3-autentisera till Ubuntu-servern med SSH-nycklar
Om du har slutfört en av procedurerna ovan bör du kunna logga in på fjärrvärden utan fjärrkontots lösenord.
grundprocessen är densamma:
- ssh username@remote_host
om det här är första gången du ansluter till den här värden (om du använde den sista metoden ovan) kan du se något så här:
OutputThe authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.Are you sure you want to continue connecting (yes/no)? yes
det betyder att din lokala dator inte känner igen fjärrvärden. Skriv ”ja”och tryck sedan på ENTER
för att fortsätta.
Om du inte angav en lösenfras för din privata nyckel kommer du att loggas in omedelbart. Om du angav en lösenfras för den privata nyckeln när du skapade nyckeln uppmanas du att ange den nu (observera att dina tangenttryckningar inte visas i terminalsessionen för säkerhet). Efter autentisering bör en ny skalsession öppnas för dig med det konfigurerade kontot på Ubuntu-servern.
om nyckelbaserad autentisering lyckades, fortsätt att lära dig hur du ytterligare säkrar ditt system genom att inaktivera lösenordsautentisering.
steg 4-Inaktivera lösenordsautentisering på din Server
Om du kunde logga in på ditt konto med SSH utan lösenord har du konfigurerat SSH-nyckelbaserad autentisering till ditt konto. Din lösenordsbaserade autentiseringsmekanism är dock fortfarande aktiv, vilket innebär att din server fortfarande utsätts för brute-force-attacker.
innan du slutför stegen i det här avsnittet, se till att du antingen har SSH-nyckelbaserad autentisering konfigurerad för root-kontot på den här servern, eller helst att du har SSH-nyckelbaserad autentisering konfigurerad för ett icke-root-konto på den här servern med sudo
privilegier. Detta steg låser lösenordsbaserade inloggningar, så att du fortfarande kan få administrativ åtkomst är avgörande.
När du har bekräftat att ditt fjärrkonto har administratörsbehörighet loggar du in på din fjärrserver med SSH-nycklar, antingen som root eller med ett konto med sudo
privilegier. Öppna sedan SSH-demonens konfigurationsfil:
- sudo nano /etc/ssh/sshd_config
inuti filen, Sök efter ett direktiv som heter PasswordAuthentication
. Detta kan kommenteras. Avkommentera raden och ställ in värdet till ”nej”. Detta inaktiverar din förmåga att logga in via SSH med kontolösenord:
...PasswordAuthentication no...
spara och stäng filen när du är klar genom att trycka på CTRL
X
, sedan Y
för att bekräfta att filen sparas och slutligen ENTER
för att avsluta Nano. För att faktiskt genomföra dessa ändringar måste vi starta omsshd
service:
- sudo systemctl restart ssh
som en försiktighetsåtgärd, öppna ett nytt terminalfönster och testa att SSH-tjänsten fungerar korrekt innan du stänger den här sessionen:
- ssh username@remote_host
När du har verifierat din SSH-tjänst kan du säkert stänga alla aktuella serversessioner.
SSH-demonen på din Ubuntu-server svarar nu bara på SSH-nycklar. Lösenordsbaserad autentisering har inaktiverats.
slutsats
Du bör nu ha SSH-nyckelbaserad autentisering konfigurerad på din server, så att du kan logga in utan att ange ett kontolösenord.
om du vill veta mer om att arbeta med SSH, ta en titt på vår SSH Essentials Guide.