Sikker opsætning og brug af SSH

SSH er den mest udbredte måde at oprette sikre forbindelser når man administrere serverer. Så hvis du i dit arbejde eller fritid nærmere dig serverer bør du være fortrolig med SSH.

SSH er kommando linje baseret og man kan finde klienter til alt fra telefoner, tablets og computere og de kan bruges til både fjernstyring af servere samt overførsel af filer. De fleste serverer understøtter SSH, på Linux, BSD og Mac er det slået til som standard. På nyere Windows versioner levere Microsoft også en SSH server men man skal manuelt slå den til.

På Mac og Linux har man automatisk SSH installeret. På windows maskiner skal man først installere SSH klienten.

Installer SSH klienten på Windows

På Windows bør man ikke længere bruge gode gamle putty. Man bør bruge den SSH-klient der følger med Windows. Den vil tit ikke være installeret som standard men du kan installere den med følgende kommandoer.

Start først powershell som administrator (højre klik, vælg kør som administrator).

Så skal du kører denne kommando:

Get-WindowsCapability -Online | ? Name -like ‘OpenSSH*’

Det giver et svar som dette:

ssh install windows

Det versionsnummer skal du nu bruge til installationskommandoen:

Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

Nu har du installeret SSH. Et alternativ hvis du har Windows 10 pro eller enterprise er at aktivere Windows services for Linux der automatisk har SSH installeret.

Opsætning af klient

Du forbinder til en server blot ved at skrive ssh brugernavn@server

Så vil den som regel bede om dit password og du er logget ind.

.ssh/config

Hvis du er træt af at skrive loginkommandoen, kan du gemme brugernavn og serveren i filen config (uden endelse eller andet, den hedder bare “config”) der ligger i .ssh mappen i dit hjemme bibliotek.

I denne tekstfil kan du skrive dine SSH servere ind i følgende format:

Host som er navnet du skriver for at forbinde 
HostName Det hostnavn som den bruger, fx martinschultz.dev
User det brugernavn du vil logge ind med.

Så det kunne for eksempel se sådanne ud:

Host dev
HostName martinschultz.dev
User martin

Så hvis jeg på min maskine skriver ssh dev vil det svare til at skrive ssh [email protected] hvilket er noget mere besværligt. Du slipper også for at huske dit brugernavn til de forskellige maskiner. Navnet på serveren kunne også være den funktion serveren udfører, så det er nemt at huske. Fx ssh emailserver når man vil logge på e-mail serveren, så skal man hverken huske brugernavn eller hosname/ip.

SSH-nøgler og authorized keys på serveren

Som standard vil SSH bede dig om dit password når du logger ind. Det er ikke specielt sikkert, det kan være at nogen kan gætte dit password eller det er lækket via en anden tjeneste.

Så et alternativ er SSH nøgler, der en kryptografisk “nøgle” som din klient udveksler med serveren og dermed beviser hvem du er.

For at bruge en SSH-nøgle skal du først generere nøglen. Det gør du på din almindelige maskine med følgende kommandoer.

ssh-keygen -t ed25519 -C “[email protected]

Derefter vil den stille nogle simple spørgsmål.

ssh install windows

Først vil den vide hvor den skal gemme nøglen, du kan bare godkende standardplaceringen.

Derefter spørger den om nøglen skal beskyttes med et password. Hvis du ikke vil bruge et password, skal du bare trykke enter. I de fleste tilfælde behøver du ikke et password på nøglen. Jeg skriver lidt mere om fordele og ulemper ved dette senere i artiklen.

Nu har du to filer, kaldet id_ed25519 og id_ed25519.pub

Den første er din private nøgle, den skal du have på din maskine for at logge ind på serveren. Hvis andre får adgang til filen, kan de logge ind på de servere du har adgang til.

id_ed25519.pub er den offentlige nøgle, det vil sige den information du skal kopiere til serveren for at kunne bruge den private nøgle til at logge ind. Den er ikke hemmelig og kan praktisk talt ikke misbruges af andre.

For at kopiere den offentlige nøgle til serveren har du et par muligheder:

  • Hvis din almindelige bruger kan logge ind på serveren via et password, kan du bruge kommandoen ssh-copy-id til at kopiere nøglen op. Det gør du med kommandoen ssh-copy-id -i ~/.ssh/id_ed25519.pub ditbrugernavn@ditdomæne

  • Du kan bruge kommandoen cat ~/.ssh/id_ed25519.pub til at se teksten i din nøgle og kopiere denne. Derefter skal du sætte den ind som en ny linje i filen .ssh/authorized_keys Den kan du for eksempel redigere med nano, så du skal skrive nano .ssh/authorized_keys på din server, sætte en ny linje ind og gemme filen.

Brug af SSH-klienten

Ud over det almindelige login som jeg tidligere har nævnt, kan man bruge ssh til filoverførsler. Det kan man gøre på to måder, enten kommandoen scp der lader dig kopiere enkelt filer eller sftp der ligesom traditionel ftp giver dig en interaktiv session hvor man kan udføre mange filoperationer.

kopier filer med scp

scp virker som enkelt kommandoer. Følgende eksempel vil uploade en fil til serveren dev, i mappen web:

scp fil.test dev:~/web

Man kan også uploade mange filer, dette vil være alle filer i en bestemt mappe:

scp filer/* dev:~/web/

Hvis man vil kopiere undermapper med, skal man bruge -r for rekursiv.

scp -r filer/* dev:~/web/

Hvis man vil kopiere filer ned fra en server, skal man bare ændre rækkefølgen.

scp -r dev:~/web/* filer/

brug af sftp

Sftp giver dig en interaktiv kommando prompt hvor du kan up/downloade filer, lave mapper osv.

Her er et eksempel hvor jeg forbinder, ser hvad der er af filer, downloader en fil og uploader en anden:

√ ~ % sftp dev
Connected to dev.
sftp> ls
test.txt
sftp> get test.txt
Fetching /root/test.txt to test.txt
/root/test.txt                             100%    5     0.1KB/s   00:00
sftp> put upload.txt
Uploading upload.txt to /root/upload.txt
upload.txt                                 100%    5     0.3KB/s   00:00
sftp> ls
test.txt    upload.txt

Så ls giver en fil liste, get downloader, put uploader.

Du kan også bruge cd til at skifte bibliotek og mkdir til at lave et nyt.

Ønsker du at udfører kommandoer på din lokale maskine kan du sætte l foran, fx lls vil give dig en liste af lokale filer.

portforwarding

Hvis du har en tjeneste på din server der ikke lytter på offentlige porte, fx af sikkerhedshensyn, men du gerne vil forbinde til den med din computers browser kan du benytte ssh port forwarding, hvor du for adgang til porte på serven.

Det gør du ved at skrive ssh -L 9000:localhost:9000 dev (hvor dev er navnet på din server).

Nu vil du kunne besøge http://localhost:9000 i din browser og du vil snakke med serveren som om du var forbundet direkte til den.

Enkelt kommando logins

Du behøver ikke at få en terminal på fjernserveren hver gang du logger ind. Hvis du bare vil udføre en enkelt kommando, kan du bare skrive den efter hostnavnet. Så du skal skrive ssh fjernvært kommando

Fx vil ssh dev uptime give min servers uptime resultat men lade mig fortsætte på min lokale maskine:

√ ~ % ssh dev uptime
 16:22:18 up 1 day, 21:13,  0 users,  load average: 0.02, 0.01, 0.00 

Opsætning af SSH-serveren

Nu er vi nået til opsætning af SSH-serveren. Den styres via konfigurationsfilen /etc/ssh/sshd_config

Efter ændringer i den skal du genstarte ssh serveren for at det tager effekt.

Tillad kun login med SSH Nøgler

Den mest åbentlyse sikkerhedsforanstaltning du kan fortage, er kun at tillade logins med ssh nøgler, dvs ingen passwords. Det kræver at du har sat ssh nøgler op som tidligere beskrevet.

For at gøre det skal du åbne konfigurationsfilen og finde følgende ud kommenterede linje:

#PasswordAuthentication yes

Og ændre den til

PasswordAuthentication no

Skift af SSH port

Nogle mennesker vil anbefale dig at skifte SSH porten så diverse bots der scanner internettet ikke nemt kan prøve at logge ind. Personligt synes jeg det er unødvendigt hvis man bruger ssh nøgler. Bruger man ikke SSH-nøgler bør man installere programmet fail2ban der blokerer for loginforsøg hvis der er flere usuccesfulde forsøg. Hvis man har en firewall foran serveren, kan man også ændre det så man kun kan logge ind fra bestemte IP-adresser. Det understøtter de store cloududbydere (aws, google cloud, azure) at man kan sætte op i deres web brugerflade.

Hvis man ønsker at ændre porten, kan det gøres i denne linje:

Port 22