Moodul 2 · 2.3
SSH nutikas kasutamine
Moodul 2: SSH ja võtmed · Lugemisaeg: 10 minutit
Õpieesmärk: Pärast seda õppetundi oskad SSH-d igapäevaselt mugavalt kasutada oma konfiguratsioonifailiga, kopeerida faile scp ja rsynciga ning jõuda tunneli kaudu andmebaasini nii, et andmebaasi port ei pea internetti avatud olema.
Põhimõisted: ~/.ssh/config, Host, HostName, User, IdentityFile, scp, rsync, sftp, port forwarding, -L, tunnel, ProxyJump, ServerAliveInterval, teine pordinumber, võtme tühistamine
Vähem trükkimist ~/.ssh/config abil
Mõne nädala pärast trükid seda kümneid kordi päevas:
anna@laptop:~$ ssh -i ~/.ssh/id_ed25519 anna@192.0.2.10Kliendi konfiguratsioonifailiga läheb see lühemaks ja teed vähem vigu. Fail asub sinu enda arvutis: ~/.ssh/config (Windows: C:\Users\anna\.ssh\config, ilma laiendita).
Host web1
HostName 192.0.2.10
User anna
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 60
Host test
HostName test.example.com
User anna
Port 2222Nüüd piisab sellest:
anna@laptop:~$ ssh web1
anna@web1:~$Mida read teevad?
- Host on hüüdnimi, mille ise valid. Kirjutad selle käskude
ssh,scpjarsyncjärele. - HostName on tegelik aadress: IP-aadress või nimi, mis on DNS-is olemas.
- User ja Port on kasutajanimi ja port, nii et sa ei pea neid enam meeles pidama.
- IdentityFile määrab võtme. Kasulik, kui sul on mitu võtit; ilma selle reata proovib ssh sinu vaikevõtmeid.
- ServerAliveInterval 60 saadab iga 60 sekundi järel väikese elumärgi. Paljud koduruuterid ja wifi-võrgud katkestavad vaikse ühenduse mõne minuti pärast; nii jääb sinu seanss avatuks.
Ka siin kehtib esimene väärtus, täpselt nagu serveris. Pane üldised reeglid nagu Host * seega faili lõppu.
Failide kopeerimine: scp, rsync ja sftp
scp kopeerib faili, sama kujuga nagu cp, kuid ette tuleb host::
anna@laptop:~$ scp backup.sql web1:/home/anna/
anna@laptop:~$ scp web1:/var/log/nginx/error.log .rsync on kaustade ja suurte andmehulkade puhul nutikam: see saadab ainult muutunud osa ja oskab katkenud kopeerimist jätkata. See peab olema paigaldatud mõlemale poolele (apt install rsync).
anna@laptop:~$ rsync -avz --progress ./site/ web1:/var/www/example.com/Pane tähele kaldkriipsu pärast ./site/: kaldkriipsuga kopeerib rsync kausta sisu, ilma kaldkriipsuta kausta enda (siis saad /var/www/example.com/site/). Kahtluse korral proovi esmalt valikuga --dry-run ja ole väga ettevaatlik valikuga --delete, mis kustutab vastuvõtval poolel kõik, mida sinu poolel pole.
sftp ja graafilised programmid nagu FileZilla või WinSCP kasutavad sama SSH-ühendust ja sama võtit. Eraldi FTP-serverit pole seega vaja. Vanamoodsat FTP-serverit VPS-is ei soovita: tavaline FTP saadab sinu parooli võrgus krüpteerimata.
Tunnel avatud pordi asemel
See on ehk kõige kasulikum asi, mida SSH oskab. Oletame, et sinu serveris töötab PostgreSQL-andmebaas. Tahad sellele oma sülearvutist graafilise programmiga ligi pääseda. Kiusatus avada port 5432 internetti on suur. Ära tee seda: avatud andmebaasipordid on üks suuremaid andmelekete põhjuseid (õppetund 10.2) ja kursus kontrollib hiljem väljastpoolt, et need on suletud (ülesanne Z5.1).
Kohaliku port forwardingu abil lased SSH-l tunneli teha:
anna@laptop:~$ ssh -L 5432:127.0.0.1:5432 web1Loe seda nii: „kuula minu sülearvutis porti 5432 ja saada kõik, mis sinna saabub, läbi SSH-ühenduse aadressile 127.0.0.1:5432, serveri vaatenurgast“. Kuni see seanss on avatud, ühendad oma andmebaasiprogrammi aadressiga localhost port 5432 oma sülearvutis ja jõuad serveris olevasse andmebaasi.
Miks see nii hea on?
- Andmebaas kuulab serveris ainult aadressil
127.0.0.1ja on väljastpoolt kättesaamatu. - Ühendus on SSH poolt krüpteeritud, isegi kui andmebaasil endal krüpteerimist pole.
- Ligi pääseb ainult see, kes saab SSH-ga sisse logida. Kasutad seega tugevat kaitset, mis sul juba olemas on.
Kui sinu sülearvutis töötab pordil 5432 juba midagi, vali vasakule teine number: -L 15432:127.0.0.1:5432, ja ühenda pordiga 15432. Kui paned tunneli faili ~/.ssh/config, on see sul alati käepärast:
Host web1-db
HostName 192.0.2.10
User anna
LocalForward 15432 127.0.0.1:5432Valikuga ssh -N web1-db saad ainult tunneli, ilma käsureata.
Vaheserveri kaudu: ProxyJump
Mõnikord pääsed serverisse ainult teise serveri kaudu, näiteks andmebaasiserver ilma avaliku IP-aadressita sinu veebiserveri taga. ProxyJump hüppab esimese serveri kaudu edasi teise:
Host db1
HostName 10.0.0.5
User anna
ProxyJump web1Erinevus agent forwardingust (õppetund 2.1): ProxyJumpi puhul kulgeb krüpteering algusest lõpuni sinu sülearvuti ja db1 vahel. Vaheserver ainult edastab pakette ega saa sinu võtit kasutada.
Teine pordinumber: jah või ei?
Paljud juhendid soovitavad panna SSH teisele pordile, näiteks 2222. Mida see tegelikult teeb?
- See vähendab müra: enamik automaatseid äraarvamiskatseid proovib ainult porti 22. Sinu logi muutub rahulikumaks.
- See ei ole turvameede. Skanner, mis käib läbi kõik pordid, leiab SSH versioonibänneri järgi sekunditega.
Võtmete ja välja lülitatud paroolisisselogimisega (õppetund 2.2) ei ole pordil turvalisuse jaoks suurt tähtsust. Kui siiski tahad vahetada, tee seda õiges järjekorras: ava tulemüüris uus port, lase SSH-l kuulata mõlemat porti, testi teises aknas ja alles siis sulge vana port. Ubuntu 24.04 ja uuemates kuuluvad sinna juurde systemctl daemon-reload ja systemctl restart ssh.socket (õppetund 2.2). Ära unusta, et sinu teenusepakkujal võib samuti olla tulemüür.
Ligipääsu tühistamine
Endisel kolleegil või veebiarendajal oli sinu serveris võti ja ta ei tööta enam sinu heaks? Ligipääsu tühistamine on lihtne, kui sa sellel silma peal hoiad:
- Vaata kõiki võtmeid:
ssh-keygen -lf ~/.ssh/authorized_keys, ja tee seda iga kasutaja jaoks (ka/root/.ssh/authorized_keys). - Eemalda selle inimese rida.
- Kui ta kasutas oma kasutajakontot, lukusta see (õppetund 3.1) ja kontrolli, kas ta oli grupis
sudo(õppetund 3.2). - Kui ta on näinud paroole, näiteks andmebaasi parooli konfiguratsioonifailis, vaheta ka need.
Tavalisel võtmel pole aegumiskuupäeva. Mida sa ei eemalda, see töötab edasi ka aastaid hiljem. Kui annad kellelegi ajutise ligipääsu, võid tema rea ette failis authorized_keys lisada valiku expiry-time="20261231"; pärast seda kuupäeva keeldub server võtmest.
Kokkuvõte
~/.ssh/configsinu enda arvutis hoiab iga serveri kohta nime, kasutajat, porti ja võtit;Host *kuulub lõppu.- scp üksikute failide jaoks, rsync kaustade jaoks (pane tähele kaldkriipsu ja valikut
--delete), sftp FTP asemel. - Käsuga
ssh -Ljõuad andmebaasini krüpteeritud tunneli kaudu, samal ajal kui andmebaasi port jääb väljastpoolt suletuks. - ProxyJump hüppab turvaliselt vaheserveri kaudu; parem kui agent forwarding.
- Teine pordinumber vähendab müra, kuid ei kaitse. Võtmed, mida sa ei eemalda, töötavad edasi.
Test (quiz)
Ülesanne
Ülesanne O2.3: SSH-config ja tunnel. Loo oma arvutis fail ~/.ssh/config hüüdnimega oma serverile, logi sisse ainult käsuga ssh <bijnaam>, kopeeri fail scp või rsynciga ja tee valikuga -L tunnel teenuseni, mis kuulab sinu serveris ainult aadressil 127.0.0.1 (kui sul pole veel andmebaasi, kasuta serveri enda porti 22: ssh -L 2200:127.0.0.1:22 <bijnaam> ja seejärel ssh -p 2200 anna@localhost). Vasta küsimustele selle kohta, mida tunnel teeb ja miks porti pole vaja avada.
Ülesanne O2.3: SSH-config ja tunnel
Selle ülesande teed ise, keegi ei kontrolli seda. Märgi ära, mida tegid, ja märgi ülesanne tehtuks.
Sülearvuti kuulab vasakpoolset porti, liiklus liigub krüpteeritult läbi SSH ja jõuab serveris aadressile 127.0.0.1:<poort>. Teenus jääb väljastpoolt kättesaamatuks. Teine SSH-port vähendab logis müra, kuid ei ole turvameede; võtmed ja välja lülitatud paroolisisselogimine on.
Su linnukesed ja märkmed jäävad ainult sellesse brauserisse, me ei saada neid kuhugi. Kui oled sisse loginud, salvestame Minu kursustes ainult info, et tegid ülesande ära.
Loe edasi
Nende artiklite sammud kehtivad WebOké VPS-ide ja paneelide kohta; teiste teenusepakkujate juures toimib see sarnaselt.
- Sisselogimine oma VPS-i SSH kaudu (ja SSH-võtme loomine)
- Juhend ssh_config (kliendi seaded): https://man.openbsd.org/ssh_config
- Juhend ssh (valikud
-L,-J,-N): https://man.openbsd.org/ssh
