Sådan kommer du igang med SSH nøgler på Mac og Linux
Introduktion
SSH nøgler eller SSH keys som de kaldes på engelsk er ikke kun smarte og mere sikre. Men de gør det også meget nemmere at administrere én eller flere Linux servere. Nå du har lavet ét nøgle par bestående af en privat og en offentlig nøgle, kan du give én eller flere Linux servere din offentlige nøgle. Og du vil nu have adgang til de servere nemt og mere sikkert ved at benytte dig af din private nøgle. Den private nøgle kunne du også have liggende på en USB pen og bruge når du eksempelvis er på farten - og bruge på hvilken som helst computer du kan komme på. Med en SSH nøgle kan du ledt have adgang til de servere eller den server du administrere ved at huske en enkel selvvalgt kode og din private nøgle.
At lave SSH nøgler er ikke så svært og det gør det meget sværere også at hacke sig adgang til servere som benytter sig af SSH nøgle-par. Det er faktisk så svært, at mange Linux servere ikke engang tager imod normale brugernavn og kodeords kombinationer, men derimod kun kan logges på med SSH nøgler - f.eks. bruger GitHub det til at give adgang til dine "repositories" og dermed gør det meget svære for hackere at få adgang til GitHub bruger og adgang til at ændre i din kode som du har liggende på GitHub.
Hvordan SSH nøgler virker
Når du laver et SSH nøgle-par, laver du i princippet en a-nøgle som vi kender det fra der hjemme. Denne a-nøgle vil så kunne åbne andre nøgler som ligger på f.eks en Linux server på nettet. Nedenunder har vi en billede, som visuelt repræsentere dette forhold imellem en "privat" nøgle og en "offentlig" nøgle.
Du kan se en privat og offentlig nøgle som henholdvis en "a-nøgle" og en "hængelås". A-nøglen har du hos dig selv imens at du har hænglåsen(e) på alle de (f.eks Linux servere) du gerne vil administrere og have adgang til. Din a-nøgle holder du altid kun for dig selv og kun du har adgang til denne nøgle, imens at du frit kan smide den offentlige nøgle ud på alle de servere du administrere og vil have adgang til.
Med andre ord, det som sker - er at du opretter en SSH forbindelse til din Linux server. Serveren sender så en besked tilbage som din egen computer kryptere med a-nøglen og derefter sender den krypterede besked tilbage. Serveren prøver så derefter at afkryptere den modtagede krypterede besked fra din computer med sin offentlige nøgle. Hvis det lykkes, vil du så få adgang.
Lav dit SSH nøgle-par
På Mac såvel som på Linux, virker det på nøjagtig samme måde. Da begge operativ systemer bygger på UNIX. Med andre ord, om du sidder på en Mac-computer, eller på din egen Linux-computer derhjemme. Så vil fremgangsmåden være nøjagtig den samme. Dog med den enkle forskel, at på Linux Distributioner såsom Ubuntu Desktop til PC - kan det hænde at SSH ikke er installeret. Hvis det ikke er installeret, så kan du nemt hente det med apt-get install openssh
, hvorimod at på Mac-computere kommer det med operativ systemet som standard.
Det første vi skal gøre er at lave nøglerne som vi skal bruge og det kan vi meget simpelt gøre med ssh-keygen
-kommandoen. Så vi åbner vores Terminal og skriver:
ssh-keygen
Bemærk at vi ikke bruger sudo, da vi vil lave nøglerne for vores egen bruger på systemet og ikke for vores "root" bruger.
Vi skal nu gå igennem guiden for at lave vores SSH nøgler.
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/dhh/.ssh/id_rsa): <ENTER>
Enter passphrase (empty for no passphrase): <KOMPLEKS KODE>
Enter same passphrase again: <KOMPLEKS KODE IGEN>
Your identification has been saved in /Users/dhh/.ssh/id_rsa.
Your public key has been saved in /Users/dhh/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:wQWw0k6htxE0yT6wBqsHd4I7QMgC18XC2XG9rEjiE70 [email protected]
The key's randomart image is:
+---[RSA 2048]----
|= .o BO oo. |
|o . *o=B .. |
|o. oo** o. . |
| *==o .o |
|.= = o S. |
| . o E . |
| o . |
| |
| |
----[SHA256]-----
Først beder guiden os om at indtaste et navn til vores generede SSH nøgler. Hvis vi blot trykker på enter-tasten, vil den bruge standarden som er id_rsa og id_rsa.pub i vores hjemmemappe under .ssh mappen. (~/.ssh, "~"-tegnet er en genvej for at komme direkte til din hjemmemappe på både Mac og Linux systemer.)
Efter det beder guiden os om at indtaste en "passphrase". Det er koden som du skal bruge, når du skal åbne din a-nøgle (private nøgle) før at du logger ind på en server for første gang. De fleste systemer, Mac såvel som Linux Distributioner - bruger noget som hedder en ssh-agent. Kort fortalt, husker den din kode i et stykke tid, så du ikke skal skrive din kode hver gang at du vil logge på en server. Så hvis du f.eks. har tre forskellige servere du vil logge på, så skal du kun skrive den én gang. Den husker det simpelthen (midlertidigt) for de næste to. Jeg anbefaler at du har en rimelig kompleks adgangskode. Ligesom i vores blogindlæg omkring password-managers, må denne her kode f.eks. godt være noget lignende "rød grød med sov og kartofler".
Efter at det så er gjort, vil den lave de to filer. Din "a-nøgle" og din offentlige nøgle som du ligger på en server. (id_rsa = privat nøgle, id_rsa.pub = offentlige nøgle.)
Næste skridt er at ligge din offentlige nøgle ud på en Linux server et sted og at teste om din a-nøgle virker.
Upload din offentlige nøgle (Public Key) til din Linux server
Der findes mange måder at uploade din offentlige nøgle på, men den mest brugte på Linux systemer er ssh-copy-id
-kommandoen.
Sidder du på en Linux maskine kan du ganske simpelt uploade din offentlige nøgle (Public Key) til en Linux server på nettet ved at skrive:
ssh-copy-id [email protected]
Du vil blive bedt om at indtaste din kode til din bruger som normalt, siden vi ikke har vores offentlige nøgle (Public Key) på serveren endnu. Når det er gjordt, vil den så tilføje din offentlige nøgle til Linux serveren og logge ud af serveren igen.
[email protected]'s password: <INDTAST KODE SOM NORMALT>
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.
På Mac, har vi ikke noget lignende ud af boksen - så vi vil istedet benytte os af gode gamle bash kommandoer:
cat ~/.ssh/id_rsa.pub | ssh [email protected] "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Kort fortalt vil denne noget lange kommando, gøre nøjagtig det samme som ssh-copy-id
. "[email protected]", skal selvfølgelig være dine oplysninger til - når du normalt logger ind på din server med dit brugernavn og kodeord.
Du vil også her blive bedt om at indtaste din kode til din bruger som normalt på serveren. Den visser dog ikke at den gør noget, den ligger bare din offentlige nøgle (Public Key) ind på serveren og logger ud igen.
Teste om din offentlige nøgle (Public Key) til din Linux server blev uploadet korrekt
Nu kan vi teste om den faktisk har lagt din offentlige nøgle (Public Key) korrekt ind på din Linux server. Det gør vi meget simpelt ved at logge ind som normalt:
ssh [email protected]
Du vil nu blive bedt om din passphrase (kode) til din a-nøgle (Private Key) i stedet for som normalt, at blive bedt om dit kodeord til din bruger på din Linux server. Hvis du allerede har prøvet at logge på én gang før, som normalt - og allerede har indtastet din passphrase for din a-nøgle. Så har din computer husket det. Og næste gang. (Ind til at du genstarter din computer eller lignende.) Vil den huske din passphrase og logge ind automatisk.
Opsæt din server til kun at tage imod SSH nøgler
Nu da du har lavet og testet din SSH nøgle for at kunne komme ind på din Linux server, ville det jo være en fordel at din Linux server kun tager imod logins med SSH nøgler. Som standard tager en Linux server nemlig imod både password logins som vi kender det men også imod SSH nøgle logins ud af boksen. Men vi kan deaktivere password logins og dermed gøre det obligatorisk for folk at bruge SSH nøgler som højner vores sikkerhed.
Vi skal ændre /etc/ssh/sshd_config filen for at kun at tage imod SSH nøgle logins:
sudo sed -i -e s/"#PasswordAuthentication yes"/"PasswordAuthentication no"/ /etc/ssh/sshd_config
Overstående kommando vil ændre vores /etc/ssh/sshd_config fil. Mere specifikt, vil den finde "#PasswordAuthentication yes" i filen og erstatte den tekst med "PasswordAuthentication no".
Du kunne også manuelt gå ind med eksempelvis sudo nano /etc/ssh/sshd_config
, rette filen for derefter at gemme.
Før at vores nu rettet /etc/ssh/sshd_config vil tage effekt, bliver vi lige nød til at genstarte ssh
servicen:
sudo service ssh restart
Og det var det, nu er log ind med passwords slået fra på vores Linux server.
Advarsel: Det betyder dog, at hvis du mister din private SSH nøgle ("a-nøgle") - vil du også miste adgangen til din server. Så hav altid en backup af din "~/.ssh/"-mappe!
Et par sidste ord
Nu har du succesfuldt lavet SSH nøgler og succesfuldt smidt din offentlige nøgle (Public Key) op på din server og har dermed ikke kun gjort den mere sikker - men også gjordt det meget nemmere for dig selv at logge ind. Hvis du har mange servere som du logger ind på, kan du snildt smide din offentlige nøgle op på flere servere - og derefter logge ind på dem alle sammen med din a-nøgle. (Private Key.)