2. modulis · 2.3
Gudra SSH lietošana
2. modulis: SSH un atslēgas · Lasīšanas laiks: 10 min.
Mācīšanās mērķis: Pēc šīs nodarbības Jūs varēsiet ērti lietot SSH ikdienā ar savu konfigurācijas failu, kopēt failus ar scp un rsync un ar tuneli piekļūt datubāzei, neatverot datubāzes portu internetam.
Pamatjēdzieni: ~/.ssh/config, Host, HostName, User, IdentityFile, scp, rsync, sftp, portu pāradresācija (port forwarding), -L, tunelis, ProxyJump, ServerAliveInterval, cits porta numurs, atslēgas atsaukšana
Mazāk rakstīšanas ar ~/.ssh/config
Pēc dažām nedēļām Jūs šo rakstāt desmitiem reižu dienā:
anna@laptop:~$ ssh -i ~/.ssh/id_ed25519 anna@192.0.2.10Ar klienta konfigurācijas failu tas kļūst īsāks, un Jūs pieļaujat mazāk kļūdu. Fails atrodas Jūsu datorā: ~/.ssh/config (Windows: C:\Users\anna\.ssh\config, bez paplašinājuma).
Host web1
HostName 192.0.2.10
User anna
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 60
Host test
HostName test.example.com
User anna
Port 2222Tagad pietiek ar:
anna@laptop:~$ ssh web1
anna@web1:~$Ko dara šīs rindas?
- Host ir iesauka, ko izvēlaties paši. To rakstāt aiz
ssh,scpunrsync. - HostName ir īstā adrese: IP adrese vai nosaukums, kas ir ierakstīts DNS.
- User un Port ir lietotājvārds un ports, lai Jums tie vairs nebūtu jāatceras.
- IdentityFile norāda atslēgu. Tas noder, ja Jums ir vairākas atslēgas; bez šīs rindas ssh mēģina Jūsu noklusējuma atslēgas.
- ServerAliveInterval 60 ik pēc 60 sekundēm nosūta nelielu dzīvības signālu. Daudzi mājas maršrutētāji un Wi-Fi tīkli pēc dažām minūtēm pārtrauc klusu savienojumu; ar šo iestatījumu Jūsu sesija paliek atvērta.
Arī šeit, tāpat kā serverī, spēkā ir pirmā vērtība. Tāpēc vispārīgas rindas, piemēram, Host *, ievietojiet faila beigās.
Failu kopēšana: scp, rsync un sftp
scp kopē failu, izmantojot to pašu pierakstu kā cp, bet ar host: priekšā:
anna@laptop:~$ scp backup.sql web1:/home/anna/
anna@laptop:~$ scp web1:/var/log/nginx/error.log .rsync ir gudrāks mapēm un lieliem datu apjomiem: tas sūta tikai to, kas ir mainījies, un var atsākt pārtrauktu kopēšanu. Tam jābūt instalētam abās pusēs (apt install rsync).
anna@laptop:~$ rsync -avz --progress ./site/ web1:/var/www/example.com/Pievērsiet uzmanību slīpsvītrai aiz ./site/: ar slīpsvītru rsync kopē mapes saturu, bez slīpsvītras pašu mapi (tad iegūsiet /var/www/example.com/site/). Ja šaubāties, vispirms izmēģiniet ar --dry-run un esiet ļoti uzmanīgi ar --delete, kas saņēmēja pusē izdzēš visu, kas neeksistē Jūsu pusē.
sftp un grafiskās programmas, piemēram, FileZilla vai WinSCP, izmanto to pašu SSH savienojumu un to pašu atslēgu. Tāpēc atsevišķs FTP serveris nav vajadzīgs. Vecmodīgu FTP serveri VPS nav ieteicams lietot: parastais FTP sūta Jūsu paroli pa tīklu nešifrētu.
Tunelis atvērta porta vietā
Tas, iespējams, ir noderīgākais, ko SSH prot. Pieņemsim, ka Jūsu serverī darbojas PostgreSQL datubāze. Jūs vēlaties tai piekļūt no klēpjdatora ar grafisku programmu. Kārdinājums atvērt portu 5432 internetam ir liels. Nedariet to: atvērti datubāzu porti ir viens no lielākajiem datu noplūžu cēloņiem (nodarbība 10.2), un kurss vēlāk no ārpuses pārbaudīs, vai tie ir slēgti (uzdevums Z5.1).
Ar lokālo portu pāradresāciju Jūs liekat SSH izveidot tuneli:
anna@laptop:~$ ssh -L 5432:127.0.0.1:5432 web1Lasiet to tā: "klausies manā klēpjdatorā portā 5432 un visu, kas tur ienāk, sūti pa SSH savienojumu uz 127.0.0.1:5432, raugoties no servera". Kamēr šī sesija ir atvērta, Jūs savienojat savu datubāzes programmu ar localhost portu 5432 savā klēpjdatorā un nonākat pie datubāzes serverī.
Kāpēc tas ir tik labi?
- Datubāze serverī klausās tikai uz
127.0.0.1un no ārpuses nav sasniedzama. - Savienojumu šifrē SSH, arī ja pašai datubāzei šifrēšanas nav.
- Piekļūt var tikai tas, kurš var pieteikties ar SSH. Tātad Jūs izmantojat jau esošo stipro aizsardzību.
Ja Jūsu klēpjdatorā portā 5432 jau kaut kas darbojas, kreisajā pusē izvēlieties citu numuru: -L 15432:127.0.0.1:5432, un savienojieties ar portu 15432. Ja ierakstāt tuneli failā ~/.ssh/config, tas Jums vienmēr būs pa rokai:
Host web1-db
HostName 192.0.2.10
User anna
LocalForward 15432 127.0.0.1:5432Ar ssh -N web1-db Jūs iegūstat tikai tuneli, bez komandrindas.
Caur starpserveri: ProxyJump
Dažreiz serveri var sasniegt tikai caur citu serveri, piemēram, datubāzes serveri bez publiskas IP adreses aiz Jūsu tīmekļa servera. ProxyJump caur pirmo serveri pārlec uz otro:
Host db1
HostName 10.0.0.5
User anna
ProxyJump web1Atšķirība no aģenta pāradresācijas (agent forwarding, nodarbība 2.1): ar ProxyJump šifrēšana darbojas no sākuma līdz beigām starp Jūsu klēpjdatoru un db1. Starpserveris tikai pārsūta paketes un nevar izmantot Jūsu atslēgu.
Cits porta numurs: jā vai nē?
Daudzas pamācības iesaka pārcelt SSH uz citu portu, piemēram, 2222. Ko tas patiesībā dod?
- Tas samazina troksni: lielākā daļa automatizēto minēšanas mēģinājumu izmēģina tikai portu 22. Jūsu žurnāls kļūst mierīgāks.
- Tā nav aizsardzība. Skeneris, kas pārbauda visus portus, sekunžu laikā atrod SSH pēc tā versijas banera.
Ja izmantojat atslēgas un pieteikšanās ar paroli ir izslēgta (nodarbība 2.2), ports drošībai maz ko maina. Ja tomēr vēlaties to mainīt, dariet to pareizā secībā: atveriet jauno portu ugunsmūrī, ļaujiet SSH klausīties abos portos, pārbaudiet otrā logā un tikai tad slēdziet veco portu. Ubuntu 24.04 un jaunākās versijās tam pieder arī systemctl daemon-reload un systemctl restart ssh.socket (nodarbība 2.2). Neaizmirstiet, ka arī Jūsu pakalpojumu sniedzējam var būt ugunsmūris.
Piekļuves atsaukšana
Bijušajam kolēģim vai tīmekļa izstrādātājam bija atslēga Jūsu serverī, un sadarbība ir beigusies? Piekļuvi atsaukt ir vienkārši, ja to uzskaitāt:
- Apskatiet visas atslēgas:
ssh-keygen -lf ~/.ssh/authorized_keys, un dariet to katram lietotājam (arī/root/.ssh/authorized_keys). - Izdzēsiet šīs personas rindu.
- Ja šai personai bija savs lietotāja konts, bloķējiet to (nodarbība 3.1) un pārbaudiet, vai tā bija grupā
sudo(nodarbība 3.2). - Ja šī persona ir redzējusi paroles, piemēram, datubāzes paroli konfigurācijas failā, nomainiet arī tās.
Parastai atslēgai nav derīguma termiņa. Tas, ko neizdzēšat, turpina darboties, arī pēc gadiem. Ja kādam piešķirat pagaidu piekļuvi, varat šīs personas rindas priekšā failā authorized_keys ierakstīt opciju expiry-time="20261231"; pēc šī datuma serveris atslēgu noraida.
Kopsavilkums
~/.ssh/configJūsu datorā katram serverim glabā nosaukumu, lietotāju, portu un atslēgu;Host *jāliek beigās.- scp atsevišķiem failiem, rsync mapēm (uzmanieties ar slīpsvītru un
--delete), sftp FTP vietā. - Ar
ssh -LJūs piekļūstat datubāzei caur šifrētu tuneli, kamēr datubāzes ports no ārpuses paliek slēgts. - ProxyJump droši pārlec caur starpserveri; tas ir labāk nekā aģenta pāradresācija.
- Cits porta numurs samazina troksni, bet neaizsargā. Atslēgas, ko neizdzēšat, turpina darboties.
Tests (quiz)
Uzdevums
Uzdevums O2.3: SSH konfigurācija un tunelis. Savā datorā izveidojiet ~/.ssh/config ar iesauku savam serverim, piesakieties tikai ar ssh <bijnaam>, nokopējiet failu ar scp vai rsync un izveidojiet tuneli ar -L uz pakalpojumu, kas Jūsu serverī klausās tikai uz 127.0.0.1 (ja Jums vēl nav datubāzes, izmantojiet paša servera portu 22: ssh -L 2200:127.0.0.1:22 <bijnaam> un pēc tam ssh -p 2200 anna@localhost). Atbildiet uz jautājumiem par to, ko dara tunelis un kāpēc portam nav jābūt atvērtam.
Uzdevums O2.3: SSH konfigurācija un tunelis
Šo uzdevumu veicat paši; neviens to nepārbauda. Atzīmējiet, ko esat izdarījuši, un atzīmējiet uzdevumu kā paveiktu.
Jūsu klēpjdators klausās kreisajā portā, datplūsma šifrēta iet caur SSH un uz servera nonāk 127.0.0.1:<poort>. Pakalpojums no ārpuses paliek nepieejams. Cits SSH ports dod mazāk trokšņa Jūsu žurnālā, taču tā nav aizsardzība; atslēgas un izslēgta pieteikšanās ar paroli gan ir.
Jūsu atzīmes un piezīmes paliek tikai šajā pārlūkprogrammā; mēs tās nekur nesūtām. Ja esat pieteikušies, sadaļā Mani kursi saglabājam tikai to, ka uzdevums ir paveikts.
Vairāk lasīt
Šajos rakstos aprakstītie soļi attiecas uz WebOké VPS un paneļiem; pie citiem pakalpojumu sniedzējiem tas darbojas līdzīgi.
- Pieteikšanās Jūsu VPS, izmantojot SSH (un SSH atslēgas izveide)
- ssh_config rokasgrāmata (klienta iestatījumi): https://man.openbsd.org/ssh_config
- ssh rokasgrāmata (opcijas
-L,-J,-N): https://man.openbsd.org/ssh - SSH piekļuves atsaukšana Jūsu VPS bijušam darbiniekam vai pazaudētam klēpjdatoram
- VPS: no pirmās pieteikšanās līdz drošam serverim 2.4: SSH konfigurācija: pieteikšanās ar īsu nosaukumu
