Aloitetaan käyttöönotosta, koska luultavasti siksi tulit tänne. Alempana tällä sivulla selitetään mikä ja miksi: Klikkaa tästä siirtyäksesi suoraan sinne.
SSH-avaimen luominen
Aloita luomalla avain. Ohjelman versiosta riippuen on mahdollista, että voit antaa pelkän ssh-keygen
-komennon ja seurata ohjeita:
$ ssh-keygen
Ohjelma kysyy, mihin haluat tallentaa tiedoston ja tarjoaa oletuksena nimeä. Kannattaa antaa sellainen nimi, joka kertoo sinulle, mitä varten tätä avainta käytetään ja millä laitteella, esimerkiksi palvelu-laite
. Esimerkiksi utu-gitlab-omakone
tai utu-gitlab-läppäri
. Sitten ohjelma kysyy, haluatko suojata avaimen salasanalla. Kirjoita salasana, paina enteriä ja sitten uudelleen. Tässä vaiheessa ohjelman tulostus näyttänee tältä:
$ ssh-keygen
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/vilho/.ssh/id_ed25519):
Enter passphrase for "/home/vilho/.ssh/id_ed25519" (empty for no passphrase):
Enter same passphrase again:
Ohjelma tulostaa lopuksi “kuvan” avaimesta. Tämän tarkoitus on lähinnä se, jos pitää etsiä tietty avain useiden joukosta, ihminen muistaa helpommin kuvan, kuin mielivaltaisen merkkijonon.
The key's randomart image is:
+--[ED25519 256]--+
|==.=o=o |
|=o* +.=. |
|oB ooX . |
|o + .B.* . |
| . o .ES= |
| . . oB |
| + + . |
| =.+ . |
| ooo |
+----[SHA256]-----+
Voit katsoa avaimia esimerkiksi ihan tekstieditorilla, kuten notepadilla.
Nyt kun en antanut avaimelle erityistä nimeä, julkinen avain löytyy tiedostosta id_ed25519.pub
ja näyttää tältä:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOS08ISar1IbNWPYnq+pERwwc/DWVwbo6iM2BmBFB3k7 vilho@kone
Yksityinen avain puolestaan tiedostosta id_ed25519
:
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
QyNTUxOQAAACDktPCEkK9SGzVj2J6vzREcMHPw1lcG6OojNgZgVQd5OwAAAJBM4b2CTOG9
ggAAAAtzc2gtZWQyNTUxOQAAACDktPCEaK9SGzVj2J6vqREcMHPw1lcG6OojNgZgVQd5Ow
AAAEr6qHLmZJ0I8oWiwOcG4u4c1WgqKkiQUiBBFtuJYAvfpOS08ISQr1IbNWPYnq+pERww
c/DWVwbo6iM2BmBVB3k7AAAADXZpbGhvQHBvbGFyaXM=
-----END OPENSSH PRIVATE KEY-----
Älä ikinä näytä yksityistä avainta kenellekään. Se pysyy omalla tietokoneellasi eikä poistu sieltä missään olosuhteissa mihinkään.
Jos olet varma, että avain on sellainen kuin pitää, voit ohittaa seuraavan ja siirtyä lukemaan avaimen siirrosta palvelimelle. Kannattaa kuitenkin silti varmistaa, että luotu avain on tarpeeksi turvallinen ja käyttää sopivaa algoritmia. Poista luomasi avain ja tee varmuuden vuoksi uusi.
Avaimen parametrit
Aiemmassa esimerkissä ssh-keygen
loi automaattisesti ED25519 -tyyppisen avaimen, mikä on nykyään hyvä ajatus. Varsinkin pienemmällä bittimäärällä luodut RSA-avaimet katsotaan nykyisin jo hieman turvattomiksi. Jos jostain syystä kirjaudut jollekin hyvin vanhalle tai tehottomalle laitteelle, voi olla tarkoituksenmukaista valita toisenlainen avain. Lisäksi voi olla hyvä asettaa muitakin parametrejä avainta generoidessaan.
Avaimen tyyppi
Valitse käytettävä algoritmi. Jos versiosi ssh-keygen
-ohjelmasta tekee oletuksena jotain muuta, näin voit asettaa avaimen tyypin:
$ ssh-keygen -t ed25519
Jos haluat tai jos jostain syystä tarvitset RSA-avaimen, sen voi luoda näin:
$ ssh-keygen -t rsa -b 4096
Anna bittimääräksi vivulla -b tarpeeksi korkea numero. Manuaalisivujen mukaan oletuksena on 3072 bittiä, joka on tätä kirjoittaessa toistaiseksi ihan riittävä.
Julkisen avaimen lopussa on kommentti. Kommentissa on oletuksena käyttätunnus ja tietokoneen nimi, mutta siihen voi antaa myös jonkin kuvaavamman nimen:
Kommentti
$ ssh-keygen -t ed25519 -C "Työläppärin avain"
Huom! Kommentti pitää lisätä tällä tavalla, koska se tallennetaan myös yksityiseen avaimeen salattuna. Jos muutat avainta käsin, se ei ehkä toimi enää toivotulla tavalla.
Avaimen siirto palvelimelle
Nyt kun avain on luotu, voit kopioita sen haluamallesi palvelimelle. Jos kyseessä on ihan vain palvelin, voit käyttää komentoriviä. Jos taas kyse on gitlabiin/githubiin ladattavasta avaimesta, etsi kyseiseltä sivulta jokin “SSH-Keys” -kohta ja seuraa ohjeita sieltä.
Avaimen kopiointi palvelimelle ssh:lla:
$ ssh-copy-id -i ed21559.pub tunnus@palvelin.fi
Tämä komento käytännössä kirjautuu palvelimelle ja lisää avaimen sinne. Avaimet lisätään ~/.ssh/authorized_keys
tiedostoon. Voit kirjautua palvelimelle itse ja tarkistaa tiedoston sisällön itse. Voisit tietenkin myös kopioida avaimen käsin tähän tiedostoon, mutta älä tee turhaan tietokoneelle tarkoitettuja töitä. Se on järjetöntä ja virheen mahdollisuus kasvaa. Komento varmistaa, että lisättävä asia on todellakin avain ja ettei samaa avainta ole lisätty aiemmin.
Avaimen käyttö kirjautumiseen
Avaimen käyttö käsin on työlästä. Katsotaan manuaalinen käyttö ihan periaatteesta, mutta sen jälkeen automatisoidaan käyttö.
Jos kirjautuu normaalisti kirjoittamalla ssh tunnus@palvelin
, palvelin kysyy edelleen salasanaa. Tälle komennolle tarvitsee antaa parametrina haluttu avain. Avaimet ovat oletuksena kotihakemiston .ssh
-hakemistossa, joten komento olisi:
ssh -i ~/.ssh/ed21559 tunnus@palvelin
Vaihda polkua, jos avaimesi on jossakin eri paikassa. Jos tämä ei jostain syystä toimi, kannattaa myös varmistua siitä, onko palvelimella avainpohjainen kirjautuminen käytössä.
Huom! Jos ohjelma kysyy silti salasanaa, huomioi kysyykö se avaimen salasanaa, vai palvelimen. Jos haluat kirjautua ilman salasanaa, luo sellainen avain, johon ei ole asetettu salasanaa.
SSH:n asetustiedosto
SSH:n asetukset löytyvät ~/.ssh/config
-tiedostosta. Tähän voi lisätä useita tietueita, jokaiselle käyttämällesi palvelulle yhden. Jos esimerkiksi haluttaisiin kirjautua utu.fi
-osoitteeseen ja käyttäjätunnus olisi tunnus
, lisätään tiedostoon seuraavat rivit:
Host utu
Hostname utu.fi
User tunnus
IdentityFile ~/.ssh/ed21559
Ensimmäinen rivi on tasattuna vasempaan reunaan ja sen jälkeen tulevat rivit sisennetään. Näin useammat tiedostossa olevat tietueet erotetaan toisistaan.
Tallenna tiedosto. Nyt kirjautuminen onnistuu helposti:
$ ssh utu
Eikä salasanaa kysytä!
Tästä eteenpäin materiaali selventävää SSH-avaimen idean, hyödyt, mutta myös niiden käyttöön liittyviä riskejä.
SSH-avaimen tarkoitus
SSH-avain mahdollistaa palvelimelle kirjautumisen ilman salasanan näppäilyä. Tämä voi jo itsessään olla houkuttelevaa, kun kirjautuminen nopeutuu, eikä salasanaa tarvitse turhaan kirjoittaa. Eräänä tärkeämpänä hyötynä on automatiikka. Ohjelmistokehityksessä, ohjelmien julkaisussa ja ylläpidossa toimiii huomattava määrä automaattisia ohjelmia. Nämä ohjelmat voidaan esimerkiksi säätää ottamaan githubiin siirretyn koodin ja julkaista automaattisesti viimeisen version nettisivuille. Ohjelmat eivät osaa näpytellä salasanaa. Tai osaavat, jos sen kirjoittaa ohjelmalle johonkin talteen. Salasanan kirjoittaminen ylipäätään sellaisenaan mihinkään on yleensä huono ajatus, koska tämä lisää riskiä, että salasana päätyy vääriin käsiin.
SSH-avain toimii tietyllä tavalla salasanana, mutta vain kirjautumista varten. Tällöin avaimen käyttäjä pääsee kyllä kirjautumaan, mutta ei voi sen jälkeen tehdä mitään salasanaa vaativia toimia. Tätä voidaan ajatella turvallisuuden kannalta: jos kirjautumaan pitää päästä, parasta päästä varta vasten kirjautumista varten tarkoitetulla “koodilla”. Tietenkin jos avaimen joutuu vääriin käsiin, sillä pääsee palvelimelle ja sieltä voi ladata tai poistaa kaiken mitä normaalistikin kirjautunut käyttäjä pystyisi.
SSH-avaimissa on lisäksi se hyöty, että jokaista ohjelmaa tai laitetta varten voi luoda erillinen avain. Jos laite katoaa, tai kaapataan, voi palvelimelta yksinkertaisesti poistaa kyseisen laitteen avaimen. Edes salasanaa ei tarvitse tässä tilanteessa vaihtaa. Jos avain on suojattu salasanalla, varastetulla avaimellakaan ei pääse välittömästi kirjautumaan mihinkään.
Mikä avain tarkalleen on?
SSH-avain koostuu kahdesta osasta: julkisesta avaimesta ja yksityisestä avaimesta. Teknisesti kyse on monimutkaisista matemaattisista funktiosta, jotka on lähes mahdoton ratkaista ilman avaimen molempia osia, mutta helppo ratkaista jos molemmat osat tiedetään.
RSA-salaus perustuu esimerkiksi modulaariseen aritmetiikkaan, joka on saattanut tulla vastaan lukion syventävillä kursseilla, tai ainakin sitten yliopistomatematiikassa. Tässä artikkelissa matemaattiseen puoleen ei paneuduta sen syvemmälle.
SSH-avain vs. salasana
Salasana saattaa olla helposti arvattava ja yleensä melko lyhyt, varsinkin jos se pitää aina itse kirjoittaa johonkin. Salasanoissa on myös tiettyjä sääntöjä, jotka helpottavat niiden arvaamista. Jos salasanassa pitää olla iso kirjain ja numeroita, isot kirjaimet ovat yleensä alussa ja numerot lopussa.
Tälläkin hetkellä kuka tahansa voisi arvata vaikka sähköpostisi salasanan ja kirjautua sinne sisään, toki nykyisin asia on vaikeampaa, jos monivaiheinen tunnistautuminen on käytössä. SSH-avaimet ovat puolestaan niin pitkiä, että niiden arvaaminen ei tule tapahtumaan. Matemaattisesti mahdollisuus on tietenkin olemassa, mutta mahdollisia avaimia on niin paljon, ettei oikeaan voi osua.
SSH-avain on käytännössä katsoen vain todella pitkä salasana, eli sikäli se täytyy pitää tallessa ihan samalla tavalla kuin salasanatkin. Niitä voidaan kuitenkin luoda useampia ja vaikka avain joutuisi vääriin käsiin, salasana ei joudu. Varastetun avaimen voi poistaa käytöstä ja salasana voi jäädä ennalleen.
Riskit
Muistatko sen läppärin, jonka myit tai annoit pois? Mahtoiko sinne jäädä ssh-avain levylle? Missähän se levy nyt menee?
Salasanaasi et toivottavasti ole antanut kenellekään, mutta ympäriinsä levitellyt SSH-avaimet saattavat unohtua. Onkin erityisen tärkeää auditoida omat avaimensa säännöllisesti. Montako avainta on luotu, missä ne ovat, kuka/mikä niitä käyttää? Kannattaa säännöllisin väliajoin uusia avaimet ja aina kun tietyn avaimen tarve päättyy, kannattaa koko avain poistaa palvelimelta.