Перейти к содержимому

SSH: подключение, ключи и безопасная настройка

35 мин

SSH (Secure Shell) — стандартный способ управлять удалённым Linux-сервером. Он шифрует весь трафик и проверяет, что вы подключились к нужному серверу. Через SSH администраторы работают с серверами, разработчики загружают код в Git, а атакующие, получив учётные данные, проникают в инфраструктуру. Поэтому SSH нужно уметь и использовать, и защищать.

Подключение

ssh student@10.0.0.5               # пользователь@адрес
ssh -p 2222 student@10.0.0.5       # нестандартный порт (по умолчанию 22)
ssh student@10.0.0.5 'uptime'      # выполнить одну команду и выйти
scp report.txt student@10.0.0.5:~/          # скопировать файл на сервер
scp student@10.0.0.5:/var/log/app.log .     # и обратно

При первом подключении SSH показывает отпечаток ключа сервера и спрашивает, доверять ли ему. Ответ запоминается в ~/.ssh/known_hosts. Если отпечаток однажды изменится, SSH громко предупредит: это может быть переустановка сервера, а может быть атака «человек посередине». Не соглашайтесь вслепую.

Ключи вместо паролей

Пароли подбирают, перехватывают и используют повторно. Ключи надёжнее: у вас закрытый ключ (никому не передаётся), на сервере — открытый ключ.

ssh-keygen -t ed25519 -C "student@laptop"     # создать пару ключей
# ~/.ssh/id_ed25519      — закрытый ключ, права 600, никому не показывать
# ~/.ssh/id_ed25519.pub  — открытый ключ, его можно раздавать

ssh-copy-id student@10.0.0.5                  # положить открытый ключ на сервер

ssh-copy-id дописывает ваш открытый ключ в файл ~/.ssh/authorized_keys на сервере. Это можно сделать и вручную:

mkdir -p ~/.ssh && chmod 700 ~/.ssh
cat id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

Используйте тип ed25519: он короче, быстрее и надёжнее старого RSA. Закрытый ключ можно защитить парольной фразой — тогда украденный файл бесполезен без неё.

Права имеют значение

SSH-сервер откажется принимать ключ, если права на файлы слишком открыты: вдруг кто-то другой подложил туда свой ключ.

ПутьПрава
~/.ssh700
~/.ssh/authorized_keys600
~/.ssh/id_ed25519 (закрытый ключ)600
домашний каталогне доступен на запись группе и остальным

«Ключ не принимается» в девяти случаях из десяти означает неправильные права.

~/.ssh/config: меньше набирать

Host web
    HostName 10.0.0.5
    User student
    Port 2222
    IdentityFile ~/.ssh/id_ed25519

Теперь достаточно набрать ssh web.

Защита SSH-сервера

Настройки сервера лежат в /etc/ssh/sshd_config. Минимальный набор для сервера в интернете:

PermitRootLogin no            # root не входит напрямую
PasswordAuthentication no     # только ключи: перебор паролей бесполезен
PubkeyAuthentication yes
MaxAuthTries 3
AllowUsers deploy admin       # кому вообще можно входить

После изменения проверьте синтаксис (sudo sshd -t) и перезапустите службу (sudo systemctl restart ssh). Не закрывайте текущую сессию, пока не проверили вход в новой: иначе можно запереть себя снаружи.

Дополнительно ставят fail2ban: он читает auth.log и временно блокирует адреса, которые перебирают пароли. Вы уже видели такие записи в уроке о журналах.

Глазами атакующего

  • найденный закрытый ключ (find / -name 'id_*' 2>/dev/null) с открытыми правами — готовый доступ к другим серверам; проверьте ~/.ssh/known_hosts и историю команд, чтобы понять, к каким;
  • запись в чужой authorized_keys — классический способ закрепиться в системе;
  • PasswordAuthentication yes и слабые пароли — цель для перебора.

🧪 Практика

В учебной среде нет второго сервера, поэтому отрабатываем всё, кроме самого подключения: создайте пару ключей ed25519, разрешите вход по своему ключу с правильными правами и исправьте небезопасную конфигурацию SSH-сервера.

SSH: подключение, ключи и безопасная настройка — Основы Linux — CyberLab