Moduuli 2 · 2.3
SSH:n fiksu käyttö
Moduuli 2: SSH ja avaimet · Lukuaika: 10 minuuttia
Tavoite: Tämän oppitunnin jälkeen osaat käyttää SSH:ta kätevästi joka päivä oman asetustiedoston avulla, kopioida tiedostoja scp:llä ja rsyncillä sekä päästä tietokantaan tunnelin kautta ilman, että tietokantaportin tarvitsee olla auki internetiin.
Keskeiset käsitteet: ~/.ssh/config, Host, HostName, User, IdentityFile, scp, rsync, sftp, port forwarding, -L, tunneli, ProxyJump, ServerAliveInterval, eri porttinumero, avaimen peruuttaminen
Vähemmän kirjoittamista: ~/.ssh/config
Muutaman viikon päästä kirjoitat tämän kymmeniä kertoja päivässä:
anna@laptop:~$ ssh -i ~/.ssh/id_ed25519 anna@192.0.2.10Asiakasohjelman asetustiedostolla komento lyhenee ja virheitä tulee vähemmän. Tiedosto on omalla tietokoneellasi: ~/.ssh/config (Windows: C:\Users\anna\.ssh\config, ilman tiedostopäätettä).
Host web1
HostName 192.0.2.10
User anna
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 60
Host test
HostName test.example.com
User anna
Port 2222Nyt riittää pelkästään:
anna@laptop:~$ ssh web1
anna@web1:~$Mitä rivit tekevät?
- Host on itse valitsemasi lempinimi. Kirjoitat sen komentojen
ssh,scpjarsyncperään. - HostName on todellinen osoite: IP-osoite tai nimi, joka löytyy DNS:stä.
- User ja Port ovat käyttäjänimi ja portti, joten sinun ei tarvitse enää muistaa niitä.
- IdentityFile kertoo, mitä avainta käytetään. Kätevä, jos sinulla on useita avaimia; ilman tätä riviä ssh kokeilee oletusavaimiasi.
- ServerAliveInterval 60 lähettää 60 sekunnin välein pienen elonmerkin. Monet kotireitittimet ja wifi-verkot katkaisevat hiljaisen yhteyden muutamassa minuutissa; tämän ansiosta istuntosi pysyy auki.
Tässäkin pätee sama kuin palvelimella: ensimmäinen arvo ratkaisee. Laita siis yleiset säännöt, kuten Host *, tiedoston loppuun.
Tiedostojen kopioiminen: scp, rsync ja sftp
scp kopioi tiedoston samassa muodossa kuin cp, mutta eteen tulee host::
anna@laptop:~$ scp backup.sql web1:/home/anna/
anna@laptop:~$ scp web1:/var/log/nginx/error.log .rsync on fiksumpi kansioiden ja suurten tietomäärien kanssa: se lähettää vain muuttuneet tiedot ja voi jatkaa keskeytynyttä kopiointia. Sen täytyy olla asennettuna molemmissa päissä (apt install rsync).
anna@laptop:~$ rsync -avz --progress ./site/ web1:/var/www/example.com/Huomaa kauttaviiva kohdan ./site/ perässä: kauttaviivan kanssa rsync kopioi kansion sisällön, ilman sitä kansion itsensä (saat silloin /var/www/example.com/site/). Jos olet epävarma, kokeile ensin valitsimella --dry-run, ja ole hyvin varovainen valitsimen --delete kanssa: se poistaa vastaanottavasta päästä kaiken, mitä sinun puolellasi ei ole.
sftp ja graafiset ohjelmat, kuten FileZilla tai WinSCP, käyttävät samaa SSH-yhteyttä ja samaa avainta. Erillistä FTP-palvelinta ei siis tarvita. Vanhanaikaista FTP-palvelinta VPS:llä ei kannata käyttää: tavallinen FTP lähettää salasanasi verkon yli salaamattomana.
Tunneli avoimen portin sijaan
Tämä on ehkä hyödyllisin asia, jonka SSH osaa. Oletetaan, että palvelimellasi pyörii PostgreSQL-tietokanta ja haluat käyttää sitä kannettavaltasi graafisella ohjelmalla. Houkutus avata portti 5432 internetiin on suuri. Älä tee sitä: avoimet tietokantaportit ovat yksi suurimmista tietovuotojen syistä (oppitunti 10.2), ja kurssi tarkistaa myöhemmin ulkopuolelta, että ne ovat kiinni (tehtävä Z5.1).
Paikallisella porttiohjauksella (local port forwarding) annat SSH:n rakentaa tunnelin:
anna@laptop:~$ ssh -L 5432:127.0.0.1:5432 web1Lue se näin: "kuuntele kannettavallani porttia 5432 ja lähetä kaikki sinne saapuva SSH-yhteyden kautta osoitteeseen 127.0.0.1:5432 palvelimen näkökulmasta". Niin kauan kuin istunto on auki, yhdistät tietokantaohjelmasi omalla kannettavallasi osoitteeseen localhost porttiin 5432 ja päädyt palvelimella olevaan tietokantaan.
Miksi tämä on niin hyvä?
- Tietokanta kuuntelee palvelimella vain osoitetta
127.0.0.1, eikä siihen pääse ulkoa. - SSH salaa yhteyden, vaikka tietokannassa itsessään ei olisi salausta.
- Vain se, joka pystyy kirjautumaan SSH:lla, pääsee käsiksi. Käytät siis vahvaa suojausta, joka sinulla jo on.
Jos kannettavallasi on jo jotain portissa 5432, valitse vasemmalle toinen numero: -L 15432:127.0.0.1:5432, ja yhdistä porttiin 15432. Kun laitat tunnelin tiedostoon ~/.ssh/config, se on aina käden ulottuvilla:
Host web1-db
HostName 192.0.2.10
User anna
LocalForward 15432 127.0.0.1:5432Valitsimella ssh -N web1-db saat pelkän tunnelin ilman komentoriviä.
Välipalvelimen kautta: ProxyJump
Joskus palvelimeen pääsee vain toisen palvelimen kautta, esimerkiksi tietokantapalvelimeen, jolla ei ole julkista IP-osoitetta ja joka on verkkopalvelimesi takana. ProxyJump hyppää ensimmäisen palvelimen kautta toiseen:
Host db1
HostName 10.0.0.5
User anna
ProxyJump web1Ero agent forwardingiin (oppitunti 2.1): ProxyJumpissa salaus kulkee päästä päähän kannettavasi ja palvelimen db1 välillä. Välipalvelin vain välittää paketit eikä voi käyttää avaintasi.
Eri porttinumero: kyllä vai ei?
Monet ohjeet neuvovat siirtämään SSH:n toiseen porttiin, esimerkiksi 2222. Mitä se oikeasti tekee?
- Se vähentää kohinaa: useimmat automaattiset arvausyritykset kokeilevat vain porttia 22. Lokisi rauhoittuu.
- Se ei ole suojaus. Kaikki portit läpikäyvä skanneri löytää SSH:n sekunneissa sen versiobannerista.
Kun käytössä ovat avaimet ja salasanakirjautuminen on pois päältä (oppitunti 2.2), portilla ei ole turvallisuuden kannalta juuri merkitystä. Jos haluat silti vaihtaa, tee se oikeassa järjestyksessä: avaa uusi portti palomuurissa, anna SSH:n kuunnella molempia portteja, testaa toisessa ikkunassa ja sulje vasta sitten vanha portti. Ubuntu 24.04:ssä ja uudemmissa tähän kuuluvat myös systemctl daemon-reload ja systemctl restart ssh.socket (oppitunti 2.2). Muista, että palveluntarjoajallasi voi olla myös oma palomuuri.
Pääsyn peruuttaminen
Entisellä työkaverilla tai verkkosivujen tekijällä oli avain palvelimellasi, eikä hän enää työskentele sinulle? Pääsyn peruuttaminen on helppoa, kun pidät kirjaa:
- Katso kaikki avaimet:
ssh-keygen -lf ~/.ssh/authorized_keys, ja tee se jokaiselle käyttäjälle (myös/root/.ssh/authorized_keys). - Poista kyseisen henkilön rivi.
- Jos hän käytti omaa käyttäjätiliä, lukitse se (oppitunti 3.1) ja tarkista, oliko hän ryhmässä
sudo(oppitunti 3.2). - Jos hän on nähnyt salasanoja, esimerkiksi tietokannan salasanan asetustiedostossa, vaihda nekin.
Tavallisella avaimella ei ole viimeistä voimassaolopäivää. Mitä et poista, toimii edelleen, vielä vuosien päästä. Jos annat jollekulle tilapäisen pääsyn, voit lisätä tiedostossa authorized_keys hänen rivinsä eteen valinnan expiry-time="20261231"; sen päivämäärän jälkeen palvelin hylkää avaimen.
Yhteenveto
~/.ssh/configomalla tietokoneellasi tallentaa kunkin palvelimen nimen, käyttäjän, portin ja avaimen;Host *kuuluu loppuun.- scp yksittäisille tiedostoille, rsync kansioille (huomaa kauttaviiva ja
--delete), sftp FTP:n sijaan. - Komennolla
ssh -Lpääset tietokantaan salatun tunnelin kautta, ja tietokantaportti pysyy ulkoa kiinni. - ProxyJump hyppää turvallisesti välipalvelimen kautta; parempi kuin agent forwarding.
- Eri porttinumero vähentää kohinaa, mutta ei suojaa. Avaimet, joita et poista, toimivat edelleen.
Tietovisa (quiz)
Tehtävä
Tehtävä O2.3: SSH-config ja tunneli. Tee omalle tietokoneellesi ~/.ssh/config, jossa on lempinimi palvelimellesi, kirjaudu sisään pelkällä komennolla ssh <bijnaam>, kopioi tiedosto scp:llä tai rsyncillä ja tee valitsimella -L tunneli palveluun, joka kuuntelee palvelimellasi vain osoitetta 127.0.0.1 (jos sinulla ei vielä ole tietokantaa, käytä palvelimen omaa porttia 22: ssh -L 2200:127.0.0.1:22 <bijnaam> ja sen jälkeen ssh -p 2200 anna@localhost). Vastaa kysymyksiin siitä, mitä tunneli tekee ja miksi porttia ei tarvitse avata.
Tehtävä O2.3: SSH-config ja tunneli
Tämän tehtävän teet itse, kukaan ei tarkista sitä. Merkitse tekemäsi kohdat ja merkitse tehtävä tehdyksi.
Kannettavasi kuuntelee vasemmanpuoleista porttia, liikenne kulkee salattuna SSH:n läpi ja päätyy palvelimella osoitteeseen 127.0.0.1:<poort>. Palveluun ei pääse edelleenkään ulkoa. Eri SSH-portti vähentää lokisi kohinaa, mutta se ei ole suojaus; avaimet ja salasanakirjautumisen poistaminen ovat.
Merkintäsi ja muistiinpanosi pysyvät vain tässä selaimessa, emme lähetä niitä minnekään. Jos olet kirjautunut sisään, tallennamme kohtaan Omat kurssit vain sen, että olet tehnyt tehtävän.
Lue lisää
Näiden artikkelien vaiheet koskevat WebOkén VPS-palvelimia ja hallintapaneeleja; muilla palveluntarjoajilla asia toimii samaan tapaan.
- Kirjautuminen VPS:llesi SSH:lla (ja SSH-avaimen luominen)
- ssh_config-ohjesivu (asiakasohjelman asetukset): https://man.openbsd.org/ssh_config
- ssh-ohjesivu (valitsimet
-L,-J,-N): https://man.openbsd.org/ssh
