Журнал Tenku

Первый вход на VPS: SSH-ключи, пользователь, файрвол и обновления

Сервер создан. В карточке 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 + пароль «чтобы не мучиться».
  • Не вешать прод на root cron без логов.
  • Не отключать ufw, потому что «мешает certbot». Certbot просит 80 порт — его и откройте точечно.
  • Не копировать ключ коллеге в Telegram. Свой ключ — свой; на сервере несколько строк в authorized_keys.

Расширенный контур: безопасность VPS. Копии системы: бэкапы.

Если всё же выкинуло

  1. Кабинет Tenku: сервер running, не suspended за оплату.
  2. Кнопка перезагрузки — если зависли после apt upgrade.
  3. Тикет: IP, что меняли в sshd, с какого IP заходите. Не пишите пароль root в тикет, если можно не писать: для консоли он может понадобиться инженеру — тогда смените после.

Первый день закончен, когда: вход только ключом, есть sudo-пользователь, UFW без лишних портов, пакеты обновлены, Fail2ban жив, время корректное. Следующий осмысленный шаг для сайта — Nginx и Let's Encrypt или перенос с shared.

Нужен сервер под задачу?

Выберите тариф и локацию — VPS появится в кабинете.

Смотреть тарифы