SSH är en förkortning av Secure Shell, och används för att via en krypterad anslutning komma åt en fjärrdator, vanligtvis en server för att kunna administriera den via terminalen.
I denna guiden kommer jag gå igenom några enkla steg hur man installerar, kommer igång och gör SSH säkert på din serverdator.
Guiden är baserad på wiki-inlägget Secure SSH, som jag själv använde mig av för något år sedan när jag hade min första server och skulle komma igång med SSH. Men jag ansåg att den kunde göras ännu mer nybörjarvänlig.
Installation
Det enda som behövs för att komma igång är paketet openssh-server på din server. Ubuntu har som standard en SSH-klient vid namn OpenSSH (openssh-client) installerad.
Installera paketet openssh-server på din server:
sudo aptitude install openssh-server
Komma igång
Nu är det bara att logga in på servern med kommandot:
ssh <användarnamn>@<IP-adress>
Inloggningsuppgifterna är kontot du har på servern. Svårare än så är det inte att komma igång med SSH, dock hänger hela säkerheten på hur starkt ditt lösenord är.
Gör SSH säkrare
Det finns några enkla säkerhetsåtgärder jag rekomenderar att man vidtar för att göra SSH säkrare, stegen jag kommer gå igenom är:
- Använda certifikat
- Byta ut standardporten
- Neka åtkomst för användaren root
- Ändra tiden man har på sig att logga in
- Inaktivera möjligheten att kunna använda det lokala kontot för att logga in
- Använda Fail2ban
Använda certifikat
För certifikatet använder vi oss av en RSA-nyckel, vilket innebär att man måste ha en nyckel som är godkänd av servern för att kunna logga in på servern.
Börja med att skapa en RSA-nyckel på din arbetsdator (En nyckel på 1024 bitar ska vara tillräckligt, men jag rekomenderar en nyckel på 4096 bitar för att vara lite extra säker):
ssh-keygen -t rsa -b 4096
Du kommer bli tillfrågad vart du vill spara din nyckel, om du inte har några nycklar sedan tidigare duger standardmappen bra, vilket du bekräftar med tangenten <Enter>. Nästa val är att välja lösenord för din nyckel, välj ett starkt lösenord, blanda gärna stora och små bokstäver, siffror och tecken för att vara extra säker.
Kopiera innehållet från filen id_rsa.pub som finns i din arbetsdator till filen authorized_keys som finns på din server. Om du inte har någon nyckel sparad i filen authorized_keys sedan tidgare, kan du kopiera hela filen till servern och samtidigt ge den rätt namn, för detta använder vi programmet SCP, vilket använder SSH.
Börja med att skapa mappen .ssh på din server:
mkdir .ssh
Kopiera sedan filen med SCP till din server:
scp -p .ssh/id_rsa.pub <användarnamn>@<IP-adress>:.ssh/authorized_keys
Var noga med att det bara är din användare som har rättigheter att läsa filen id_rsa.pub på din arbetsdator och filen authorized_keys på din server. Är du osäker kan du sätta rätt rättigheter med dessa kommandon:
Klienten:
chmod 600 id_rsa.pub
Servern:
chmod 600 authorized_keys
Byta ut standardporten
Att byta ut standardporten är en enkel och bra åtgärd för att försvåra åtkomsten för obehöriga användare.
Börja med att öppna filen /etc/ssh/sshd_config på din server:
sudo nano /etc/ssh/sshd_config
Leta reda på raden:
Port 22
Och ändra värdet till en annan ledig port, gärna en port ovan 10000.
Neka åtkomst för användaren root
Att inte tillåta användaren root använda SSH är en annan enkel säkerhetsåtgärd som jag rekomenderar.
Leta reda på raden:
PermitRootLogin yes
Och ändra värdet yes till no.
Ändra tiden man har på sig att logga in
Att ändra tiden man har på sig att logga in kan vara en god idé, detta är helt valfritt. Som standard har man 120 sekunder på sig att logga in.
För att ändra värdet för detta är det följande rad du ska ändra:
LoginGraceTime 120
Inaktivera möjligheten att kunna använda det lokala kontot för att logga in
Detta är en åtgärd jag starkt rekomenderar att man ordnar. Om du inaktiverar möjligheten att kunna använda det lokala kontot på servern för att kunna ansluta måste man ha ett certifikat för att kunna komma åt servern via SSH.
Leta reda på raden:
PasswordAuthentication yes
Och ändra värdet yes till no.
Kontrollera även så att följande rader i konfigurationsfilen stämmer:
Protocol 2
UsePrivilegeSeparation yes
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
Spara och stäng filen med tangentbordskombinationen <Ctrl> + <X>, följt av <y> för att bekräfta åtgärden.
För att ändringarna ska börja gälla på servern behöver vi starta om tjänsten:
sudo /etc/init.d/ssh restart
Använd Fail2ban
Fail2ban är en tjänst som går igenom loggarna på din server och bannar IP-adresser som har angett fel lösenord 3 gånger i rad. Den uppdaterar brandväggen och blockerar IP-adresserna via den vägen. Fail2ban är även ett smidigt program om du har Apache, vsftp etc.
För att installera fail2ban använder du dig av kommandot:
sudo aptitude install fail2ban
Som standard blockeras IP-adressen i 600 sekunder efter 3 felaktiga försök. Eftersom standardvärdet på 600 sekunder bara håller fel folk bort en kort stund rekomenderar jag att du ändrat värdet så att blockeringen blir permanent.
Öppna konfigurationsfilen med kommandot:
sudo nano /etc/fail2ban/jail.conf
Leta reda på detta stycket som finns i början av filen:
[DEFAULT]
# "ignoreip" can be an IP address, a CIDR mask or a DNS host
ignoreip = 127.0.0.1
bantime = 600
maxretry = 3
Ändra värdet för bantime till 0, vilket gör avstäningen permanent.
Spara och stäng filen med tangentbordskombinationen <Ctrl> + <X>, följt av <y> för att bekräfta åtgärden.
Nu är det bara att logga in på din server med kommandot:
ssh <användarnamn>@<IP-adress> -p <Port>
Du kommer nu bli tillfrågad om att låsa upp den privata RSA-nyckeln som du tidigare skapade.
Väl inloggad via SSH ser det ut så här:
Lycka till!












Lathund är en blogg om Ubuntu för alla, oavsett kunskapsnivå. Jag som ligger bakom bloggen är känd under pseudonymen Hund och är 26 år gammal.
Problemet med scp -p .ssh/id_rsa.pub @:.ssh/authorized_keys för att lägga till en nyckel i authorized_keys-filen är att man skriver över hela authorized_keys? Det ställer ju till problem om man redan har nycklar från en annan dator i authorized_keys-filen. Hur gör jag för att lägga till en nyckel sist i filen utan att gå omvägen om att ladda upp nyckeln och sedan med cat lägga till en rad sist i authorized_keys?
Och varför har du -p innan .ssh/id_rsa...? Har det med min förra fråga att göra?
Yepp. Om man redan har en nyckel sedan tidigare kan man ju alltid klistra in innehållet själv.
Saxat från man:
Ssh kan även komprimera trafik och öppna krypterade tcp-tunnlar till servern så att man exempelvis kan nå tjänster hos servern bundna till localhost, från sin egen maskin. En riktigt bra finess med detta är X11 forwarding: ssh -X user@host xterm, så exekveras xterm på servern med fönstret på den lokala datorn.
I stället för att använda XDMCP för fjärrinloggning har jag provat följande (i en terminal på den lokala datorn):
Xephyr :1 &
DISPLAY=:1 ssh -X user@host gnome-session
Sedan är jag inloggad på fjärrdatorn med en komplett Gnome-session i ett fönster på min dator.
"Äntligen!"
- Gert Fylking
Man kan med fördel använda ssh-copy-id för att kopiera nyckeln från klienten till severn.
Om man inte använder standardporten 22 så kan man konfigurera klienten med /etc/ssh/ssh_config så att rätt port används automatiskt.
@gusse: Intressant, ska kika på det.
Jag tyckte det var lite märkligt att ssh-copy-id inte funkade på någon annan port än 22. Men om jag förstår /etc/ssh/ssh_config rätt, så kan man även använda ~/.ssh/config för det där. Men det har inte funkat för mig, tyvärr.
@Hund
Bra initiativ! Jag tror inte att jag har sett någon så här utförlig gör-så-här-sida om SSH på svenska.
@Maths: Kul att du gillade den.
Ytterligare värt att nämna är ~/.ssh/config där man kan göra inställningar för specifika hoster:
(~ $) cat ~/.ssh/config
Host kth.se
User ***
HostName my.nada.kth.se
(~ $)
Så 'ssh kth.se' är kort för 'ssh -l *** my.nada.kth.se'.
Bra guide Hund !
@bamse: Tack.
Tänkte bara hälsa att jag kastade mitt utkast till en SSH-post och länkade till din i stället!
@rigg: Kul att det uppskattas.
Den tackar jag för, Johan !
LJ
@Little John: Nemas problemas.