Mikä on SSH-avain?
SSH-avain viittaa ns. "avainpariin", jota voidaan käyttää turvallisempaan ja helpompaan palvelimelle kirjautumiseen salasanojen sijaan.
Avainpareja käyttäessä hyökkääjä ei pysty arvaamaan salasanaasi, vaan tarvitsee avaimen, joka löytyy vain sinulta.
Miksi SSH-avaimet ovat hyödyllisiä?
SSH-avaimet liittyvät tietoturvaan ja etäyhteyksiin. SSH (Secure Shell) on protokolla, jonka avulla voit yhdistää turvallisesti tietokoneeseen, palvelimelle tai vaikka pilvipalveluun.
Tyypillisesti ihmiset yhdistävät SSH:lla palvelimille käyttämällä salasanoja, mutta tässä on pari ongelmaa:
-
Salasanat voivat olla heikkoja tai varastettavia.
-
Salasanoja joutuu kirjoittamaan usein, mikä on hankalaa, jos yhdistät monta kertaa päivässä.
SSH-avaimet tekevät tästä helpompaa ja turvallisempaa.
SSH-avain tulee aina olemaan vahvempi kuin salasanasi koska ne ovat monia tuhansia merkkejä pitkiä joten hyökkääjät eivät pysty tekemään niin sanottua brute force hyökkäystä saadakseen salasanasi.
SSH-avaimet koostuvat kahdesta salaisesta avaimesta:
-
Yksityinen avain (private key) – pysyy sinun koneellasi ja sitä EI koskaan lähetetä muualle.
-
Julkinen avain (public key) – asetetaan palvelimelle, johon haluat yhdistää.
Kun yrität yhdistää palvelimelle:
-
Palvelin tarkistaa, että sinulla on vastaava yksityinen avain.
-
Jos avaimet täsmäävät, pääset sisään ilman salasanaa.
SSH-avaimen luonti
Jos SSH-avainta ei löydy, se täytyy luoda käyttämällä komentoa "ssh-keygen" (Windows-ympäristöissä "ssh-keygen.exe")
- Avaa terminaali tai cmd
- Aja "ssh-keygen"
- Seuraa ruudulla näkyviä ohjeita
Tarkista, että avaimet on luotu:
Oman koneesi kotikansiosta:
ls -l ~/.ssh/
dir $env:USERPROFILE\.ssh -Force
Pitäisi näkyä esim:
id_ed25519 (yksityinen, älä kopioi minnekään)
id_ed25519.pub (julkinen, tämän sisältö viedään palvelimelle)
Kopioi julkinen avain palvelimelle.
Helpoin tapa:
Linux: Avaa terminal ja syötä komento:
ssh-copy-id -i ~/.ssh/id_ed25519.pub käyttäjä@palvelin
Windows: Avaa powershell ja syötä komento:
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh käyttäjä@palvelin "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
Tämä kysyy salasanan kerran ja hoitaa kaiken automaattisesti.
Jos ssh-copy-id ei ole käytössä tai komento ei onnistu:
Tee manuaalisesti
Linux:
Näytä julkisen avaimen sisältö ja Kopioi koko rivi (alkaa ssh-ed25519 ja loppuu käyttäjänimeen).
cat ~/.ssh/id_ed25519.pub
Kirjaudu palvelimelle salasanalla:
ssh käyttäjä@palvelin
Palvelimella:
mkdir -p ~/.sshchmod 700 ~/.sshnano ~/.ssh/authorized_keys
Liitä avain tiedoston loppuun yhdelle riville.
Tallenna (Ctrl+O, Enter) ja sulje (Ctrl+X).
Aseta oikeudet:
chmod 600 ~/.ssh/authorized_keys
Testaa kirjautuminen
Poistu palvelimelta ja yritä uudelleen:
ssh käyttäjä@palvelin
Jos kaikki onnistui, et enää joudu syöttämään palvelimen salasanaa.
Windows:
Avaa powershell ja syötä komento:
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub
Kopioi koko avainrivi (alkaa ssh-ed25519 ja loppuu käyttäjänimeen).
Yhdistä palvelimelle salasanalla:
ssh käyttäjä@palvelin
Palvelimen päässä:
mkdir -p ~/.sshchmod 700 ~/.sshnano ~/.ssh/authorized_keys
Liitä avain tiedoston loppuun yhdelle riville.
Tallenna (Ctrl+O, Enter) ja sulje (Ctrl+X).
Aseta oikeudet:
chmod 600 ~/.ssh/authorized_keys
Testaa kirjautuminen
Poistu palvelimelta ja yritä uudelleen:
ssh käyttäjä@palvelin
Jos kaikki onnistui, et enää joudu syöttämään palvelimen salasanaa.
Kuinka käynnistän SSH-servicen uudelleen
useimmat RedHat- ja Debian-pohjaiset, esim. RHEL 7+, CentOS 7+, Fedora, Ubuntu 16.04+, Debian 8+
sudo systemctl restart sshd
Debian-/Ubuntu-puolella palvelun nimi voi myös olla ssh
sudo systemctl restart ssh
Vanhat SysVinit (esim. RHEL 6, Debian 7, Ubuntu 14.04 tai vanhemmat)
sudo service ssh restart # Debian/Ubuntusudo service sshd restart # RedHat
Kuinka luot uuden käyttäjän
1. Avaa komentokehote ja syötä seuraavat tiedot erikseen
adduser kayttaja(korvaa haluamalla käyttäjä nimellä)passwd kayttaja(korvaa omalla käyttäjä salasanalla)
2. Sen jälkeen annetaan käyttäjille sudo-oikeudet
usermod -aG wheel kayttaja
3. Sitten varmistetaan onko wheel-ryhmällä sudo oikeudet
visudo
etsi seuraava koodi ja tarkista ettei sen edessä ole # merkkiä
%wheel ALL=(ALL) ALL
4. Sen jälkeen testaa pääsetkö käyttäjällä palvelimelle
ssh kayttaja@palvelin
5. Testaa sen jälkeen käyttäjän rooli
sudo whoami
Jos saat vastaukseksi root on silloin kaikki kunnossa
Root kirjautumisen estäminen ssh:ssa
Muista tehdä uusi käyttäjä ennen kun poistat rooin kirjautumisen
1. Avaa nano tekstieditori
sudo nano /etc/ssh/sshd_config
etsi tai lisää sieltä kohta nimellä:
PermitRootLogin no
2. Käynnistä SSH uudelleen
systemctl restart sshd
3. Testaa vielä sen jälkeen pääseekö root kirjautumaan
ssh root@palvelin
Terminaali kysyy ensin rootin salasanaa, joka on normaalia ja sen jälkeen tule permission denied, joka kertoo sen että onnistuit
Salasanan käytöstä poistaminen palvelimen kirjautumisesta
Etäpalvelimen päästä voidaan poistaa kokonaan käytöstä salasana-autentikaatio muokkaamalla SSH-palvelimen asetuksia.
Kun SSH-avaimella kirjautuminen on testattu toimivaksi:
Avaa SSH-palvelimen asetustiedosto
sudo nano /etc/ssh/sshd_config
Varmista, että julkisella avaimella kirjautuminen on päällä
Etsi rivi "#PubkeyAuthentication yes", ja ota sen edestä #-kirjain pois.
Poista salasanakirjautuminen pois käytöstä
Etsi rivi "#PasswordAuthentication yes", ja muuta se muotoon "PasswordAuthentication no" (ilman #-kirjainta!").
Tallenna tiedosto
Paina CTRL + X, jolloin editori saattaa pyytää varmistusta, johon painetaan Y-kirjainta vahvistaakseen tallennus.
Käynnistä SSH-palvelin uudelleen
sudo systemctl reload sshd
Varmista, että avaimella kirjautuminen toimii ja salasanaa ei enää hyväksytä.
Nyt palvelimesi:
-
Hyväksyy vain SSH-avaimella kirjautumisen
-
Estää root-käyttäjän kirjautumisen SSH:n kautta


