Към съдържанието

Настройки за бисквитки

Изберете кои видове бисквитки разрешавате. Можете да промените избора си по всяко време чрез „Настройки за бисквитки“ в долната част на всяка страница. Декларация за поверителност

Необходими

Винаги включени

Нужни са за вход, за запазване на количката и на Вашите избори. Те са винаги включени.

Кои бисквитки?
  • weboke_sessie, weboke_klant, weboke_remember: Вашата сесия и оставането в акаунта
  • weboke_basket: Вашата количка
  • wkBtwIncl: показване на цените с или без ДДС
  • wok_cookies: Вашият избор за бисквитките, 12 месеца

Измерват коя реклама води до посещение или поръчка, за да не плащаме за реклами без резултат.

Кои бисквитки?
  • Google Ads чрез Google Tag Manager (_gcl_au, _gcl_aw), до 90 дни
  • OpenAI Ads, реклами в ChatGPT
  • wok_aff: кой партньор Ви е препратил към нас (партньорска програма), 60 дни

4,6

Държава и език

Всяка държава има собствен сайт, с цените и ДДС на тази държава.

Преглед

Умно използване на SSH

Модул 2: SSH и ключове · Време за четене: 10 минути

Цел на урока: След този урок ще можете удобно да използвате SSH всеки ден със собствен конфигурационен файл, да копирате файлове със scp и rsync и да достигате до база данни през тунел, без портът на базата данни да трябва да е отворен към интернет.

Основни понятия: ~/.ssh/config, Host, HostName, User, IdentityFile, scp, rsync, sftp, port forwarding, -L, тунел, ProxyJump, ServerAliveInterval, друг номер на порт, отнемане на ключ

По-малко писане с ~/.ssh/config

След няколко седмици ще пишете това десетки пъти на ден:

anna@laptop:~$ ssh -i ~/.ssh/id_ed25519 anna@192.0.2.10

С конфигурационен файл за клиента командата става по-кратка и правите по-малко грешки. Файлът се намира на Вашия собствен компютър: ~/.ssh/config (Windows: C:\Users\anna\.ssh\config, без разширение).

Host web1
    HostName 192.0.2.10
    User anna
    IdentityFile ~/.ssh/id_ed25519
    ServerAliveInterval 60

Host test
    HostName test.example.com
    User anna
    Port 2222

Сега е просто:

anna@laptop:~$ ssh web1
anna@web1:~$

Какво правят редовете?

  • Host е псевдонимът, който избирате сами. Пишете го след ssh, scp и rsync.
  • HostName е истинският адрес: IP адрес или име, което е записано в DNS.
  • User и Port са потребителското име и портът, така че вече не е нужно да ги помните.
  • IdentityFile посочва ключа. Полезно е, ако имате няколко ключа; без този ред ssh опитва стандартните Ви ключове.
  • ServerAliveInterval 60 изпраща на всеки 60 секунди малък сигнал, че връзката е жива. Много домашни рутери и wifi мрежи прекъсват неактивна връзка след няколко минути; така сесията Ви остава отворена.

И тук важи правилото, че първата стойност е тази, която се взема предвид, точно както при сървъра. Затова поставяйте общи правила като Host * в края на файла.

Копиране на файлове: scp, rsync и sftp

scp копира файл със същата форма като cp, но с host: отпред:

anna@laptop:~$ scp backup.sql web1:/home/anna/
anna@laptop:~$ scp web1:/var/log/nginx/error.log .

rsync е по-умен при папки и големи количества данни: изпраща само това, което е променено, и може да продължи прекъснато копиране. Трябва да е инсталиран и от двете страни (apt install rsync).

anna@laptop:~$ rsync -avz --progress ./site/ web1:/var/www/example.com/

Обърнете внимание на наклонената черта след ./site/: с наклонена черта rsync копира съдържанието на папката, без нея копира самата папка (тогава получавате /var/www/example.com/site/). При съмнение опитайте първо с --dry-run и бъдете много внимателни с --delete, която изтрива от приемащата страна всичко, което не съществува при Вас.

sftp и графични програми като FileZilla или WinSCP използват същата SSH връзка и същия ключ. Затова не е нужен отделен FTP сървър. Старомоден FTP сървър на VPS не се препоръчва: обикновеният FTP изпраща паролата Ви по мрежата некриптирана.

Тунел вместо отворен порт

Това е може би най-полезното, което SSH може. Да предположим, че на Вашия сървър работи база данни PostgreSQL. Искате да стигнете до нея от лаптопа си с графична програма. Изкушението да отворите порт 5432 към интернет е голямо. Не го правете: отворените портове на бази данни са една от най-честите причини за изтичане на данни (урок 10.2), а курсът по-късно проверява отвън дали са затворени (задача Z5.1).

С локално port forwarding карате SSH да изгради тунел:

anna@laptop:~$ ssh -L 5432:127.0.0.1:5432 web1

Четете го така: „слушай на моя лаптоп на порт 5432 и препращай всичко, което пристига там, през SSH връзката към 127.0.0.1:5432, погледнато от сървъра“. Докато тази сесия е отворена, свързвате програмата си за бази данни с localhost порт 5432 на собствения си лаптоп и стигате до базата данни на сървъра.

Какво го прави толкова добро?

  • Базата данни слуша само на 127.0.0.1 на сървъра и е недостъпна отвън.
  • Връзката е криптирана от SSH, дори ако самата база данни няма криптиране.
  • Само който може да влезе през SSH, има достъп. Така използвате силната защита, която вече имате.

Ако на лаптопа Ви вече работи нещо на 5432, изберете друг номер вляво: -L 15432:127.0.0.1:5432, и се свържете с порт 15432. Ако запишете тунела в ~/.ssh/config, той винаги ще Ви е под ръка:

Host web1-db
    HostName 192.0.2.10
    User anna
    LocalForward 15432 127.0.0.1:5432

С ssh -N web1-db получавате само тунела, без команден ред.

През междинен сървър: ProxyJump

Понякога до даден сървър може да се стигне само през друг, например сървър за бази данни без публичен IP адрес зад Вашия уеб сървър. ProxyJump преминава през първия сървър до втория:

Host db1
    HostName 10.0.0.5
    User anna
    ProxyJump web1

Разликата с agent forwarding (урок 2.1): при ProxyJump криптирането е от край до край между Вашия лаптоп и db1. Междинният сървър само препраща пакетите и не може да използва Вашия ключ.

Друг номер на порт: да или не?

Много ръководства препоръчват SSH да се премести на друг порт, например 2222. Какво постига това в действителност?

  • То намалява шума: повечето автоматизирани опити за отгатване пробват само порт 22. Логът Ви става по-спокоен.
  • То не е защита. Скенер, който обхожда всички портове, намира SSH за секунди по банера с версията.

С ключове и изключено влизане с парола (урок 2.2) портът няма голямо значение за сигурността. Ако все пак искате да го смените, направете го в правилния ред: отворете новия порт в защитната стена, накарайте SSH да слуша и на двата порта, тествайте във втори прозорец и едва тогава затворете стария порт. При Ubuntu 24.04 и по-нови към това спадат systemctl daemon-reload и systemctl restart ssh.socket (урок 2.2). Не забравяйте, че Вашият доставчик може също да има защитна стена.

Отнемане на достъп

Бивш колега или уеб разработчик е имал ключ на Вашия сървър и вече не работи за Вас? Отнемането на достъпа е лесно, ако водите отчет:

  1. Прегледайте всички ключове: ssh-keygen -lf ~/.ssh/authorized_keys, и го направете за всеки потребител (също и за /root/.ssh/authorized_keys).
  2. Изтрийте реда на този човек.
  3. Ако е използвал собствен потребителски акаунт, заключете го (урок 3.1) и проверете дали е бил в групата sudo (урок 3.2).
  4. Ако е виждал пароли, например парола за база данни в конфигурационен файл, сменете и тях.

Обикновеният ключ няма срок на валидност. Това, което не изтриете, продължава да работи, дори години по-късно. Ако давате на някого временен достъп, можете да поставите опцията expiry-time="20261231" пред неговия ред в authorized_keys; след тази дата сървърът отказва ключа.

Обобщение

  • ~/.ssh/config на собствения Ви компютър пази за всеки сървър името, потребителя, порта и ключа; Host * е мястото в края.
  • scp за отделни файлове, rsync за папки (внимавайте с наклонената черта и с --delete), sftp вместо FTP.
  • С ssh -L достигате до база данни през криптиран тунел, докато портът на базата данни остава затворен отвън.
  • ProxyJump преминава безопасно през междинен сървър; по-добре е от agent forwarding.
  • Друг номер на порт намалява шума, но не защитава. Ключовете, които не изтриете, продължават да работят.

Тест (quiz)

1. Какво прави ssh -L 15432:127.0.0.1:5432 web1?



2. Защо SSH тунел към база данни е по-добър от отварянето на порт 5432 в защитната стена?



3. Премествате SSH на порт 2222. Какъв е най-важният ефект?



4. Във Вашия ~/.ssh/config в началото стои Host * с User root, а по-надолу Host web1 с User anna. Като кой потребител влизате при ssh web1?



5. Уеб разработчик е имал собствен SSH ключ на Вашия сървър и вече не работи за Вас. Кое НЕ е достатъчно?



Задача

Задача O2.3: SSH config и тунел. Създайте на собствения си компютър ~/.ssh/config с псевдоним за Вашия сървър, влезте само с ssh <bijnaam>, копирайте файл със scp или rsync и изградете тунел с -L към услуга, която на сървъра Ви слуша само на 127.0.0.1 (ако все още нямате база данни, използвайте порт 22 на самия сървър: ssh -L 2200:127.0.0.1:22 <bijnaam> и след това ssh -p 2200 anna@localhost). Отговорете на въпросите какво прави тунелът и защо портът не трябва да е отворен.

Задача O2.3: SSH config и тунел

Тази задача изпълнявате сами; никой не я проверява. Отбележете какво сте направили и маркирайте задачата като изпълнена.




Вашите отметки и бележки остават само в този браузър; не ги изпращаме никъде. Ако сте влезли, в Моите курсове запазваме само че сте изпълнили задачата.

Още за четене

Стъпките в тези статии се отнасят за VPS сървърите и панелите на WebOké; при други доставчици работи по подобен начин.

Моля, изчакайте…

Настройте домейните си

За всеки домейн настройте сървърите за имена, връзката с хостинга и кой ще бъде собственикът.

Домейните Ви се зареждат…