Сервер создан. В карточке VPS есть IP и пароль root. Дальше либо вы за 20 минут закрываете дыры по умолчанию, либо через неделю словари подбирают пароль к 22 порту. Это не теория: открытый SSH с паролем в интернете сканируют постоянно.
Ниже — рабочий порядок для Ubuntu/Debian на VPS Tenku. Команды можно копировать. Если шаг не прошёл — не идите дальше, сначала почините его: иначе легко выкинуть себя из сервера без запасного входа.
Что должно быть под рукой
- IP из кабинета Tenku.
- Пароль root из карточки сервера.
- Компьютер, с которого будете заходить постоянно — с него и заведём ключ.
- Понимание: после отключения пароля без ключа вы не войдёте. Ключ копируют в парольный менеджер или хотя бы делают вторую флешку. Потеряли оба — тикет в поддержку, не «переустановить прод».
Если сервера ещё нет — тарифы и создание в кабинете. Что вообще такое VPS — в обзорной статье.
Вход в первый раз
Windows
Подойдёт встроенный OpenSSH в Windows 10/11 (приложение «Терминал») или любой клиент с OpenSSH.
ssh root@IP_СЕРВЕРА
Спросит fingerprint — сравните с тем, что видите только в этот первый раз, напишите yes. Пароль вставляйте правой кнопкой или Shift+Insert: при вводе символы не отображаются, это нормально.
Если ssh не является командой — в «Параметры → Приложения → Дополнительные компоненты» добавьте OpenSSH Client.
macOS и Linux
Та же команда в Terminal. Если порт вдруг не 22 (вы его ещё не меняли — значит 22):
ssh -p 22 root@IP_СЕРВЕРА
«Connection timed out»
До ключей это почти всегда не «сломанный Linux», а сеть:
- IP перепутали, взяли IPv6 вместо v4 или наоборот.
- С вашей стороны режут 22 порт (корпоративный Wi‑Fi, «защитный» провайдер).
- Сервер ещё поднимается — подождите минуту, в кабинете статус «работает», и повторите.
Проверка с вашей машины: ping IP (ICMP могут закрыть — не паника) и повторный ssh -v root@IP — в отладке видно, на чём зависает TCP.
«Permission denied»
Пароль скопировали с пробелом, раскладка, старый пароль после переустановки. Возьмите пароль из карточки ещё раз. Три-четыре ошибки подряд — не долбите: Fail2ban вы ещё не ставили, но со словарём вас уже заметили сканеры, не добавляйте шум.
Сразу сделайте SSH-ключ
Пароль по SSH — это временный инструмент выдачи. Боевой вход — ключ Ed25519.
На своём компьютере, не на сервере:
ssh-keygen -t ed25519 -C "tenku-admin" -f %USERPROFILE%\.ssh\id_ed25519_tenku
На macOS/Linux путь будет ~/.ssh/id_ed25519_tenku. Кодовую фразу на ключ поставьте. Это второй фактор: украденный файл без фразы бесполезен.
Windows (PowerShell), отправка ключа:
type $env:USERPROFILE\.ssh\id_ed25519_tenku.pub | ssh root@IP "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"
macOS/Linux:
ssh-copy-id -i ~/.ssh/id_ed25519_tenku.pub root@IP_СЕРВЕРА
Проверьте новый вход, не закрывая старую сессию:
ssh -i ~/.ssh/id_ed25519_tenku root@IP_СЕРВЕРА
Если пустил без пароля — ключ работает. Только теперь можно отключать парольный вход. Если не пустил — ничего в sshd_config не трогайте.
Как не забыть ключ в повседневности
Файл ~/.ssh/config на своём ПК:
Host tenku-prod
HostName IP_СЕРВЕРА
User root
IdentityFile ~/.ssh/id_ed25519_tenku
Дальше: ssh tenku-prod. Когда заведёте обычного пользователя, смените User.
Пользователь не под root на каждый день
Root оставьте для аварии. На сервере:
adduser deploy
usermod -aG sudo deploy
rsync -a ~/.ssh /home/deploy/
chown -R deploy:deploy /home/deploy/.ssh
Проверьте вход:
ssh -i ~/.ssh/id_ed25519_tenku deploy@IP_СЕРВЕРА
sudo -v
Если sudo спросил пароль пользователя deploy — так и должно быть. Запомните его, это не пароль root из кабинета.
Отключите пароль в SSH — только после проверки ключа
Откройте конфиг:
sudo nano /etc/ssh/sshd_config
Добейтесь явных строк (не закомментированных):
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin prohibit-password
PubkeyAuthentication yes
На очень старых системах вместо KbdInteractiveAuthentication встречается ChallengeResponseAuthentication no.
Проверка конфига и применение:
sudo sshd -t && sudo systemctl reload ssh
На Ubuntu 24 сервис может называться ssh, не sshd. Если reload ругается — systemctl reload sshd.
Не закрывайте текущую сессию, откройте третью: вход под deploy ключом. Только после успеха можно расслабиться.
Менять порт SSH с 22 на 2222 имеет смысл от шума в логах, не от целевого взлома. Если меняете — сначала UFW на новый порт, потом sshd, потом проверка. Иначе вырежете себя.
Обновления в первый час
sudo apt update
sudo apt -y full-upgrade
sudo timedatectl set-timezone Asia/Sakhalin
Часовой пояс поставьте свой: логи с «неправильным» временем превращают инциденты в квест. Для Москвы — Europe/Moscow.
Автообновления безопасности:
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
Перезагрузка после ядра: sudo reboot. В кабинете Tenku сервер должен вернуться в «работает». Потом снова SSH ключом.
UFW: закройте всё лишнее
Пока на сервере нет сайта, откройте только SSH:
sudo apt install -y ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status verbose
Команда enable спросит подтверждение — вы в SSH, правило OpenSSH уже стоит, отвечайте y.
Когда появится сайт:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
Не открывайте MySQL 3306 в интернет «чтобы удобно с ноутбука». Подключайтесь по SSH-туннелю. Как ставить Nginx и сертификат — в отдельном гайде.
Проверка снаружи с другой сети (телефон на LTE): сайт открывается, а telnet IP 3306 — нет.
Fail2ban: чтобы словари не жили на 22 порту
sudo apt install -y fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Минимальный /etc/fail2ban/jail.d/sshd.local:
[sshd]
enabled = true
maxretry = 4
findtime = 10m
bantime = 1h
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd
Если себя забанили — с другой сети или через консоль/тикет Tenku. Не ставьте bantime = -1 в первый день.
Имя хоста, мотд и «что это за машина»
sudo hostnamectl set-hostname shop-nsk-01
echo "127.0.1.1 shop-nsk-01" | sudo tee -a /etc/hosts
Через год у вас будет пять VPS. Имя в hostname и в кабинете Tenku лучше совпадают.
Что не делать в первый день
- Не ставить «панель все в одном», пока не понимаете, какие порты она откроет.
- Не включать
PermitRootLogin yes+ пароль «чтобы не мучиться». - Не вешать прод на
rootcron без логов. - Не отключать
ufw, потому что «мешает certbot». Certbot просит 80 порт — его и откройте точечно. - Не копировать ключ коллеге в Telegram. Свой ключ — свой; на сервере несколько строк в
authorized_keys.
Расширенный контур: безопасность VPS. Копии системы: бэкапы.
Если всё же выкинуло
- Кабинет Tenku: сервер running, не suspended за оплату.
- Кнопка перезагрузки — если зависли после
apt upgrade. - Тикет: IP, что меняли в sshd, с какого IP заходите. Не пишите пароль root в тикет, если можно не писать: для консоли он может понадобиться инженеру — тогда смените после.
Первый день закончен, когда: вход только ключом, есть sudo-пользователь, UFW без лишних портов, пакеты обновлены, Fail2ban жив, время корректное. Следующий осмысленный шаг для сайта — Nginx и Let's Encrypt или перенос с shared.