Модул 1 · 1.3
Първото влизане през SSH
Модул 1: Вашият първи сървър · Време за четене: 10 минути
Цел на урока: След този урок ще можете да влезете за първи път в сървъра си през SSH, ще проверите пръстовия отпечатък на сървъра, преди да му се доверите, и ще знаете какво да правите при предупреждение, че самоличността на сървъра се е променила.
Основни понятия: SSH, клиент и сървър, порт 22, банер с версията, host key, пръстов отпечатък (SHA256), known_hosts, trust on first use, "REMOTE HOST IDENTIFICATION HAS CHANGED", PowerShell и Terminal
Какво е SSH
SSH (Secure Shell) е криптираната връзка, с която управлявате сървър от разстояние. Вие пишете на собствения си компютър, а командите се изпълняват на сървъра. Всичко, което минава по връзката, включително Вашата парола, е криптирано.
Има две страни:
- SSH клиентът на Вашия компютър: програмата
ssh. В macOS и Linux тя е налична по подразбиране. В Windows 10 (от версия 1809) и Windows 11 клиентът OpenSSH е част от Windows; използвате го в PowerShell или Windows Terminal. Ако липсва, добавете го през Настройки, Допълнителни функции, "OpenSSH Client". Програми с прозорци като PuTTY също работят, но в този курс използвамеssh. - SSH сървърът на VPS: програмата
sshd(от OpenSSH). По подразбиране тя слуша на порт 22.
Влизане
Влизате с потребителско име и адреса на сървъра:
PS C:\Users\anna> ssh root@192.0.2.10Или с име, ако сте го задали в DNS (урок 7.1):
anna@laptop:~$ ssh root@web1.example.comПървия път ще видите нещо подобно:
The authenticity of host '192.0.2.10 (192.0.2.10)' can't be established.
ED25519 key fingerprint is SHA256:Xq3aTnPpC0m1o4cJ2kVqY8mWb7rZs5dLfE6hUyN9tKs.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?Това е най-важният момент в този урок. Не въвеждайте сляпо yes.
Host key и пръстовият отпечатък
Всеки SSH сървър има един или повече host keys: двойки ключове, с които сървърът доказва кой е. Публичните части се намират на сървъра в /etc/ssh/, например /etc/ssh/ssh_host_ed25519_key.pub. При всяка връзка сървърът показва, че притежава тайната част.
Пръстовият отпечатък е кратко обобщение (hash) на такъв публичен ключ. По подразбиране OpenSSH показва формата SHA256: SHA256:, последвано от 43 знака.
Въпросът "Are you sure you want to continue connecting?" означава: Вашият компютър все още не познава този сървър. Кой гарантира, че говорите с Вашия VPS, а не с някой, който прихваща трафика? Никой, освен ако Вие не сравните пръстовия отпечатък с надежден източник.
Този източник е конзолата на Вашия доставчик (урок 1.2). Там не комуникирате със сървъра през мрежата. Влезте в конзолата и изведете пръстовия отпечатък:
root@web1:~# ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
256 SHA256:Xq3aTnPpC0m1o4cJ2kVqY8mWb7rZs5dLfE6hUyN9tKs root@web1 (ED25519)Ако той съвпада точно с това, което показва клиентът, въведете yes. Можете също да поставите самия пръстов отпечатък вместо yes; тогава ssh ще го сравни вместо Вас. Ако се различава, спрете и изяснете причината (грешен IP адрес, преинсталиран сървър или нещо по-сериозно).
Обърнете внимание на типа: клиентът посочва типа (ED25519, ECDSA или RSA). Сравнявайте пръстовия отпечатък от същия тип. Много images показват пръстовите отпечатъци и при първото стартиране в конзолата (cloud-init), между редове като BEGIN SSH HOST KEY FINGERPRINTS.
known_hosts и trust on first use
Когато въведете yes, ще видите:
Warning: Permanently added '192.0.2.10' (ED25519) to the list of known hosts.Клиентът запазва ключа в ~/.ssh/known_hosts (в Windows C:\Users\<naam>\.ssh\known_hosts). Оттук нататък той сравнява автоматично при всяка връзка. Този модел се нарича trust on first use (TOFU): първия път трябва да проверите сами, след това клиентът следи вместо Вас.
Затова първата проверка е толкова важна: ако се доверите на грешен ключ, клиентът никога повече няма да Ви предупреди.
Ако самите Вие работите на компютър с Debian или Ubuntu, имената в known_hosts по подразбиране са хеширани (HashKnownHosts yes в /etc/ssh/ssh_config), така че там няма да видите четими IP адреси. В Windows и macOS те са записани четимо. Търсенето работи навсякъде с:
anna@laptop:~$ ssh-keygen -F 192.0.2.10
# Host 192.0.2.10 found: line 3
|1|kP9...= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA..."REMOTE HOST IDENTIFICATION HAS CHANGED"
Понякога ще видите това предупреждение:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
...
Host key verification failed.Сървърът показва различен ключ от този, който познава Вашият клиент. Тогава ssh отказва да се свърже. Има два вида причини:
| Нормални | Подозрителни |
|---|---|
| Преинсталирали сте VPS (нови host keys) | Не сте променяли нищо, а ключът все пак е различен |
| IP адресът е даден на друг сървър | Свързани сте към непозната Wi-Fi мрежа |
| Съзнателно сте сменили host keys | Пръстовият отпечатък в конзолата се различава от това, което клиентът вижда сега |
Ако има нормално обяснение, проверете отново пръстовия отпечатък в конзолата и едва след това изтрийте стария ред:
anna@laptop:~$ ssh-keygen -R 192.0.2.10
# Host 192.0.2.10 found: line 3
/home/anna/.ssh/known_hosts updated.При следващата връзка отново ще получите въпроса от първия път и отново ще проверите. Никога не задавайте StrictHostKeyChecking no в настройките си, за да махнете предупреждението: така изключвате точно защитата, за която става дума.
Банерът с версията
Преди нещо да бъде криптирано, клиентът и сървърът си изпращат един ред текст: банера с версията. Той е видим за всеки в интернет. Можете да го видите с ssh -v:
anna@laptop:~$ ssh -v root@192.0.2.10 2>&1 | grep "remote software"
debug1: Remote protocol version 2.0, remote software version OpenSSH_9.6p1 Ubuntu-3ubuntu13.5Тук сървърът съобщава кой протокол (2.0) и какъв софтуер използва. Debian и Ubuntu добавят след него версията на пакета. Това не е тайна, която трябва да криете: нападателите пробват всичко така или иначе, а Вие се защитавате с актуализации (модул 4), не с различен банер. Полезно е обаче, че по банера можете да видите отвън дали сървърът Ви наистина работи с актуализираната версия.
В AlmaLinux и Rocky Linux
Влизането и пръстовите отпечатъци работят по същия начин. Услугата се казва sshd вместо ssh (systemctl status sshd). Банерът не съдържа име на дистрибуцията, а само версията на OpenSSH.
Обобщение
- SSH е криптираната връзка към Вашия сървър;
sshе клиентът, аsshdе сървърът на порт 22. - При първата връзка клиентът показва пръстовия отпечатък на host key. Сравнете го с изхода на
ssh-keygen -lfв конзолата, преди да въведетеyes. - Клиентът запазва ключа в
~/.ssh/known_hostsи занапред сам предупреждава (trust on first use). - "REMOTE HOST IDENTIFICATION HAS CHANGED" е нормално след преинсталация; иначе е подозрително. Изтривайте стар ред само след проверка, с
ssh-keygen -R. - Банерът с версията е публичен; защитата идва от актуализациите, а не от скриването.
Тест (quiz)
Задача
Задача Z1.3: SSH банер и пръстов отпечатък на Вашия сървър. Въведете адреса на Вашия сървър, версията на софтуера от банера (например OpenSSH_9.6p1) и пръстовия отпечатък ED25519, който сте извели в конзолата с ssh-keygen -lf. Програмата прави една връзка към Вашия SSH порт, прочита банера и host key и ги сравнява. Тя не влиза в сървъра.
Още за четене
- Вход във Вашия VPS чрез SSH (и създаване на SSH ключ)
- Нямате повече достъп до Вашия VPS: какво да направите?
- ssh-keygen(1), опции -l, -F и -R: https://manpages.debian.org/trixie/openssh-client/ssh-keygen.1.en.html
- ssh_config(5), StrictHostKeyChecking, FingerprintHash и HashKnownHosts: https://manpages.debian.org/trixie/openssh-client/ssh_config.5.en.html
- RFC 4253, раздел 4.2 (банерът с версията): https://www.rfc-editor.org/rfc/rfc4253.html
- VPS: от първото влизане до сигурен сървър 2.1: Първо влизане със SSH
