Moduuli 1 · 1.3
Ensimmäinen SSH-kirjautuminen
Moduuli 1: Ensimmäinen palvelimesi · Lukuaika: 10 minuuttia
Tavoite: Tämän oppitunnin jälkeen osaat kirjautua palvelimellesi SSH:lla ensimmäistä kertaa, tarkistaa palvelimen sormenjäljen ennen kuin luotat siihen ja tiedät, mitä teet, kun saat varoituksen palvelimen tunnisteen muuttumisesta.
Keskeiset käsitteet: SSH, asiakas ja palvelin, portti 22, versiobanneri, host key, sormenjälki (SHA256), known_hosts, trust on first use, "REMOTE HOST IDENTIFICATION HAS CHANGED", PowerShell ja Terminal
Mikä SSH on
SSH (Secure Shell) on salattu yhteys, jolla hallitset palvelinta etänä. Kirjoitat omalla tietokoneellasi, ja komennot suoritetaan palvelimella. Kaikki yhteyden yli kulkeva, myös salasanasi, on salattua.
Yhteydellä on kaksi päätä:
- SSH-asiakas omalla tietokoneellasi: ohjelma
ssh. Se on valmiina macOS:ssä ja Linuxissa. Windows 10:ssä (versiosta 1809 alkaen) ja Windows 11:ssä OpenSSH-asiakas on osa Windowsia; käytät sitä PowerShellissä tai Windows Terminalissa. Jos se puuttuu, lisää se kohdasta Asetukset, Valinnaiset ominaisuudet, "OpenSSH-asiakas". Myös ikkunalliset ohjelmat, kuten PuTTY, toimivat, mutta tällä kurssilla käytämmessh-ohjelmaa. - SSH-palvelin VPS:llä: ohjelma
sshd(OpenSSH:sta). Se kuuntelee oletuksena porttia 22.
Kirjautuminen
Kirjaudut sisään käyttäjänimellä ja palvelimen osoitteella:
PS C:\Users\anna> ssh root@192.0.2.10Tai nimellä, jos olet lisännyt sen DNS:ään (oppitunti 7.1):
anna@laptop:~$ ssh root@web1.example.comEnsimmäisellä kerralla näet jotain tällaista:
The authenticity of host '192.0.2.10 (192.0.2.10)' can't be established.
ED25519 key fingerprint is SHA256:Xq3aTnPpC0m1o4cJ2kVqY8mWb7rZs5dLfE6hUyN9tKs.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?Tämä on oppitunnin tärkein hetki. Älä kirjoita yes sokeasti.
Host key ja sormenjälki
Jokaisella SSH-palvelimella on yksi tai useampi host key: avainpari, jolla palvelin todistaa, kuka se on. Julkiset osat ovat palvelimella hakemistossa /etc/ssh/, esimerkiksi /etc/ssh/ssh_host_ed25519_key.pub. Jokaisessa yhteydessä palvelin osoittaa, että sillä on salainen osa.
Sormenjälki on lyhyt tiiviste (hash) tällaisesta julkisesta avaimesta. OpenSSH näyttää oletuksena SHA256-muodon: SHA256: ja sen perässä 43 merkkiä.
Kysymys "Are you sure you want to continue connecting?" tarkoittaa: tietokoneesi ei vielä tunne tätä palvelinta. Kuka takaa, että puhut omalle VPS:llesi etkä jollekulle, joka sieppaa liikenteen? Ei kukaan, ellet itse vertaa sormenjälkeä luotettavaan lähteeseen.
Tämä lähde on palveluntarjoajasi konsoli (oppitunti 1.2). Siellä et keskustele palvelimen kanssa verkon kautta. Kirjaudu konsoliin ja hae sormenjälki:
root@web1:~# ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
256 SHA256:Xq3aTnPpC0m1o4cJ2kVqY8mWb7rZs5dLfE6hUyN9tKs root@web1 (ED25519)Jos tulos vastaa täsmälleen sitä, mitä asiakas näyttää, kirjoita yes. Voit myös liittää itse sormenjäljen sanan yes sijaan; silloin ssh vertaa sen puolestasi. Jos se poikkeaa, lopeta ja selvitä syy (väärä IP-osoite, palvelin asennettu uudelleen tai jotain vakavampaa).
Huomaa avaimen tyyppi: asiakas kertoo tyypin (ED25519, ECDSA tai RSA). Vertaa saman tyypin sormenjälkeä. Monet levykuvat näyttävät sormenjäljet myös konsolissa ensimmäisen käynnistyksen yhteydessä (cloud-init), rivien kuten BEGIN SSH HOST KEY FINGERPRINTS välissä.
known_hosts ja trust on first use
Kun kirjoitat yes, näet:
Warning: Permanently added '192.0.2.10' (ED25519) to the list of known hosts.Asiakas tallentaa avaimen tiedostoon ~/.ssh/known_hosts (Windowsissa C:\Users\<nimi>\.ssh\known_hosts). Tästä eteenpäin se vertaa avainta automaattisesti jokaisessa yhteydessä. Tätä mallia kutsutaan nimellä trust on first use (TOFU): ensimmäisellä kerralla sinun on tarkistettava itse, sen jälkeen asiakas valvoo.
Siksi ensimmäinen tarkistus on niin tärkeä: jos luotat väärään avaimeen, asiakas ei sen jälkeen enää koskaan varoita.
Jos käytät itse Debian- tai Ubuntu-tietokonetta, tiedoston known_hosts nimet ovat oletuksena tiivistettyjä (HashKnownHosts yes tiedostossa /etc/ssh/ssh_config), joten et näe siellä luettavia IP-osoitteita. Windowsissa ja macOS:ssä ne ovat luettavassa muodossa. Haku toimii kaikkialla näin:
anna@laptop:~$ ssh-keygen -F 192.0.2.10
# Host 192.0.2.10 found: line 3
|1|kP9...= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA..."REMOTE HOST IDENTIFICATION HAS CHANGED"
Joskus näet tämän varoituksen:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
...
Host key verification failed.Palvelin näyttää eri avaimen kuin asiakkaasi tuntee. ssh kieltäytyy silloin muodostamasta yhteyttä. Syitä on kahdenlaisia:
| Tavallinen | Epäilyttävä |
|---|---|
| Olet asentanut VPS:n uudelleen (uudet host keyt) | Et ole muuttanut mitään, ja silti avain on eri |
| IP-osoite on annettu toiselle palvelimelle | Olet vieraassa wifi-verkossa |
| Olet tarkoituksella vaihtanut host keyt | Konsolin sormenjälki poikkeaa siitä, mitä asiakas nyt näkee |
Jos syy on tavallinen, tarkista sormenjälki uudelleen konsolissa ja poista vasta sen jälkeen vanha rivi:
anna@laptop:~$ ssh-keygen -R 192.0.2.10
# Host 192.0.2.10 found: line 3
/home/anna/.ssh/known_hosts updated.Seuraavassa yhteydessä saat taas ensimmäisen kerran kysymyksen, ja tarkistat jälleen. Älä koskaan aseta StrictHostKeyChecking no asetuksiisi päästäksesi eroon varoituksesta: silloin kytket pois juuri sen suojauksen, josta on kyse.
Versiobanneri
Ennen kuin mitään salataan, asiakas ja palvelin lähettävät toisilleen tekstirivin: versiobannerin. Se näkyy kaikille internetissä. Näet sen komennolla ssh -v:
anna@laptop:~$ ssh -v root@192.0.2.10 2>&1 | grep "remote software"
debug1: Remote protocol version 2.0, remote software version OpenSSH_9.6p1 Ubuntu-3ubuntu13.5Palvelin kertoo tässä, mitä protokollaa (2.0) ja mitä ohjelmistoa se käyttää. Debian ja Ubuntu lisäävät perään paketin version. Se ei ole salaisuus, joka pitäisi piilottaa: hyökkääjät kokeilevat kuitenkin kaikkea, ja suojaudut päivityksillä (moduuli 4), et toisella bannerilla. Hyödyllistä kuitenkin: bannerista näet ulkopuolelta, ajaako palvelimesi todella päivitettyä versiota.
AlmaLinuxissa ja Rocky Linuxissa
Kirjautuminen ja sormenjäljet toimivat samoin. Palvelun nimi on sshd eikä ssh (systemctl status sshd). Bannerissa ei ole jakelun nimeä, vain OpenSSH-versio.
Yhteenveto
- SSH on salattu yhteys palvelimellesi;
sshon asiakas,sshdpalvelin portissa 22. - Ensimmäisessä yhteydessä asiakas näyttää host keyn sormenjäljen. Vertaa sitä konsolissa ajetun komennon
ssh-keygen -lftulosteeseen ennen kuin kirjoitatyes. - Asiakas tallentaa avaimen tiedostoon
~/.ssh/known_hostsja varoittaa jatkossa itse (trust on first use). - "REMOTE HOST IDENTIFICATION HAS CHANGED" on tavallinen uudelleenasennuksen jälkeen; muuten se on epäilyttävä. Poista vanha rivi vain tarkistuksen jälkeen komennolla
ssh-keygen -R. - Versiobanneri on julkinen; suoja tulee päivityksistä, ei piilottamisesta.
Tietovisa (quiz)
Tehtävä
Tehtävä Z1.3: Palvelimesi SSH-banneri ja sormenjälki. Anna palvelimesi osoite, bannerin ohjelmistoversio (kuten OpenSSH_9.6p1) ja ED25519-sormenjälki, jonka hait konsolissa komennolla ssh-keygen -lf. Ohjelma muodostaa yhden yhteyden SSH-porttiisi, lukee bannerin ja host keyn ja vertaa niitä. Se ei kirjaudu sisään.
Lue lisää
- Kirjautuminen VPS:llesi SSH:lla (ja SSH-avaimen luominen)
- Et pääse enää VPS:llesi: mitä nyt?
- ssh-keygen(1), valitsimet -l, -F ja -R: https://manpages.debian.org/trixie/openssh-client/ssh-keygen.1.en.html
- ssh_config(5), StrictHostKeyChecking, FingerprintHash ja HashKnownHosts: https://manpages.debian.org/trixie/openssh-client/ssh_config.5.en.html
- RFC 4253, kohta 4.2 (versiobanneri): https://www.rfc-editor.org/rfc/rfc4253.html
- VPS: ensimmäisestä kirjautumisesta turvalliseen palvelimeen 2.1: Ensimmäinen kirjautuminen SSH:lla
