Modul 2 · 2.3
Slovenčina
Šikovné používanie SSH
Modul 2: SSH a kľúče · Čas čítania: 10 minút
Cieľ lekcie: Po tejto lekcii budete vedieť pohodlne používať SSH každý deň s vlastným konfiguračným súborom, kopírovať súbory pomocou scp a rsync a cez tunel sa dostať k databáze bez toho, aby databázový port musel byť otvorený do internetu.
Kľúčové pojmy: ~/.ssh/config, Host, HostName, User, IdentityFile, scp, rsync, sftp, port forwarding, -L, tunel, ProxyJump, ServerAliveInterval, iné číslo portu, odvolanie kľúča
Menej písania vďaka ~/.ssh/config
Po niekoľkých týždňoch toto napíšete desiatky ráz denne:
anna@laptop:~$ ssh -i ~/.ssh/id_ed25519 anna@192.0.2.10S konfiguračným súborom pre klienta to bude kratšie a urobíte menej chýb. Súbor sa nachádza na vašom vlastnom počítači: ~/.ssh/config (Windows: C:\Users\anna\.ssh\config, bez prípony).
Host web1
HostName 192.0.2.10
User anna
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 60
Host test
HostName test.example.com
User anna
Port 2222Teraz stačí jednoducho:
anna@laptop:~$ ssh web1
anna@web1:~$Čo robia jednotlivé riadky?
- Host je prezývka, ktorú si zvolíte sami. Píšete ju za
ssh,scparsync. - HostName je skutočná adresa: IP adresa alebo názov, ktorý je v DNS.
- User a Port sú používateľské meno a port, takže si ich už nemusíte pamätať.
- IdentityFile určuje kľúč. Hodí sa, ak máte viac kľúčov; bez tohto riadku skúša ssh vaše predvolené kľúče.
- ServerAliveInterval 60 posiela každých 60 sekúnd malý signál, že spojenie žije. Mnohé domáce routery a siete wifi po niekoľkých minútach prerušia tiché spojenie; vďaka tomu zostane vaša relácia otvorená.
Aj tu platí, rovnako ako na serveri, že rozhoduje prvá hodnota. Všeobecné pravidlá ako Host * preto dajte na koniec súboru.
Kopírovanie súborov: scp, rsync a sftp
scp kopíruje súbor v rovnakom tvare ako cp, ale s host: pred ním:
anna@laptop:~$ scp backup.sql web1:/home/anna/
anna@laptop:~$ scp web1:/var/log/nginx/error.log .rsync je šikovnejší pri priečinkoch a veľkých objemoch: posiela len to, čo sa zmenilo, a dokáže pokračovať v prerušenom kopírovaní. Musí byť nainštalovaný na oboch stranách (apt install rsync).
anna@laptop:~$ rsync -avz --progress ./site/ web1:/var/www/example.com/Dávajte pozor na lomku za ./site/: s lomkou rsync kopíruje obsah priečinka, bez lomky samotný priečinok (dostanete potom /var/www/example.com/site/). Ak si nie ste istí, vyskúšajte to najprv s --dry-run a buďte veľmi opatrní s --delete, ktorý na prijímajúcej strane odstráni všetko, čo u vás neexistuje.
sftp a grafické programy ako FileZilla alebo WinSCP používajú rovnaké spojenie SSH a rovnaký kľúč. Nie je teda potrebný samostatný FTP server. Staromódny FTP server na VPS neodporúčame: obyčajné FTP posiela vaše heslo cez sieť nezašifrované.
Tunel namiesto otvoreného portu
Toto je možno to najužitočnejšie, čo SSH dokáže. Predstavte si, že na vašom serveri beží databáza PostgreSQL. Chcete sa k nej dostať z notebooku pomocou grafického programu. Pokušenie otvoriť port 5432 do internetu je veľké. Nerobte to: otvorené databázové porty patria medzi najčastejšie príčiny únikov dát (lekcia 10.2) a kurz neskôr zvonku overí, že sú zatvorené (úloha Z5.1).
Pomocou lokálneho presmerovania portu (local port forwarding) necháte SSH vytvoriť tunel:
anna@laptop:~$ ssh -L 5432:127.0.0.1:5432 web1Čítajte to takto: "počúvaj na mojom notebooku na porte 5432 a všetko, čo tam príde, pošli cez spojenie SSH na 127.0.0.1:5432, z pohľadu servera". Kým je táto relácia otvorená, pripájate svoj databázový program na localhost port 5432 na vlastnom notebooku a dostanete sa k databáze na serveri.
Prečo je to také dobré?
- Databáza počúva na serveri len na
127.0.0.1a zvonku je nedostupná. - Spojenie šifruje SSH, aj keď samotná databáza šifrovanie nemá.
- Dostane sa k nej len ten, kto sa vie prihlásiť cez SSH. Využívate teda silné zabezpečenie, ktoré už máte.
Ak na vašom notebooku už niečo beží na porte 5432, zvoľte vľavo iné číslo: -L 15432:127.0.0.1:5432 a pripojte sa na port 15432. Ak tunel zapíšete do ~/.ssh/config, budete ho mať vždy po ruke:
Host web1-db
HostName 192.0.2.10
User anna
LocalForward 15432 127.0.0.1:5432S ssh -N web1-db dostanete len tunel, bez príkazového riadku.
Cez prechodný server: ProxyJump
Niekedy sa k serveru dostanete len cez iný server, napríklad k databázovému serveru bez verejnej IP adresy za vaším webovým serverom. ProxyJump preskočí cez prvý server na druhý:
Host db1
HostName 10.0.0.5
User anna
ProxyJump web1Rozdiel oproti agent forwarding (lekcia 2.1): pri ProxyJump prebieha šifrovanie od začiatku do konca medzi vaším notebookom a db1. Prechodný server len odovzdáva pakety ďalej a váš kľúč použiť nemôže.
Iné číslo portu: áno, alebo nie?
Mnohé návody odporúčajú presunúť SSH na iný port, napríklad 2222. Čo to v skutočnosti robí?
- Znižuje šum: väčšina automatizovaných pokusov o uhádnutie hesla skúša len port 22. Váš log bude pokojnejší.
- Nie je to zabezpečenie. Skener, ktorý prejde všetky porty, nájde SSH za pár sekúnd podľa jeho bannera s verziou.
S kľúčmi a vypnutým prihlasovaním heslom (lekcia 2.2) port pre bezpečnosť veľa neznamená. Ak ho predsa chcete zmeniť, urobte to v správnom poradí: otvorte nový port vo firewalle, nechajte SSH počúvať na oboch portoch, otestujte to v druhom okne a až potom zatvorte starý port. Na Ubuntu 24.04 a novšom k tomu patria systemctl daemon-reload a systemctl restart ssh.socket (lekcia 2.2). Nezabudnite, že aj váš poskytovateľ môže mať firewall.
Odvolanie prístupu
Bývalý kolega alebo tvorca webu mal kľúč na vašom serveri a už pre vás nepracuje? Odvolať prístup je jednoduché, ak si to evidujete:
- Pozrite si všetky kľúče:
ssh-keygen -lf ~/.ssh/authorized_keys, a urobte to pre každého používateľa (aj/root/.ssh/authorized_keys). - Odstráňte riadok tejto osoby.
- Ak používala vlastný používateľský účet, uzamknite ho (lekcia 3.1) a skontrolujte, či bola v skupine
sudo(lekcia 3.2). - Ak videla heslá, napríklad heslo k databáze v konfiguračnom súbore, zmeňte aj tie.
Obyčajný kľúč nemá dátum platnosti. Čo neodstránite, funguje ďalej, aj po rokoch. Ak niekomu dávate dočasný prístup, môžete pred jeho riadok v authorized_keys pridať voľbu expiry-time="20261231"; po tomto dátume server kľúč odmietne.
Zhrnutie
~/.ssh/configna vašom vlastnom počítači uchováva pre každý server názov, používateľa, port a kľúč;Host *patrí na koniec.- scp na jednotlivé súbory, rsync na priečinky (pozor na lomku a na
--delete), sftp namiesto FTP. - S
ssh -Lsa dostanete k databáze cez šifrovaný tunel, zatiaľ čo databázový port zostáva zvonku zatvorený. - ProxyJump bezpečne preskočí cez prechodný server; je to lepšie ako agent forwarding.
- Iné číslo portu znižuje šum, ale nezabezpečuje. Kľúče, ktoré neodstránite, fungujú ďalej.
Kvíz
Úloha
Úloha O2.3: SSH config a tunel. Na svojom počítači vytvorte ~/.ssh/config s prezývkou pre váš server, prihláste sa len pomocou ssh <bijnaam>, skopírujte súbor pomocou scp alebo rsync a vytvorte tunel s -L k službe, ktorá na vašom serveri počúva len na 127.0.0.1 (ak ešte nemáte databázu, použite port 22 samotného servera: ssh -L 2200:127.0.0.1:22 <bijnaam> a potom ssh -p 2200 anna@localhost). Odpovedzte na otázky o tom, čo tunel robí a prečo port nemusí byť otvorený.
Úloha O2.3: SSH config a tunel
Túto úlohu vykonávate sami, nikto ju nekontroluje. Odškrtnite, čo ste urobili, a označte úlohu ako splnenú.
Váš notebook počúva na ľavom porte, prevádzka ide šifrovane cez SSH a na serveri vychádza na 127.0.0.1:<poort>. Služba zostáva zvonku nedostupná. Iný port pre SSH vám v logu zníži šum, no nie je to zabezpečenie; to zabezpečia kľúče a vypnuté prihlasovanie heslom.
Vaše zaškrtnutia a poznámky zostávajú iba v tomto prehliadači, nikam ich neposielame. Po prihlásení si v sekcii Moje kurzy uchovávame iba to, že ste úlohu splnili.
Ďalšie čítanie
Postupy v týchto článkoch platia pre VPS a panely WebOké; u iných poskytovateľov to funguje podobne.
- Prihlásenie do VPS cez SSH (a vytvorenie SSH kľúča)
- Manuál ssh_config (nastavenia klienta): https://man.openbsd.org/ssh_config
- Manuál ssh (voľby
-L,-J,-N): https://man.openbsd.org/ssh
