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-сервер откажется принимать ключ, если права на файлы слишком открыты: вдруг кто-то другой подложил туда свой ключ.
| Путь | Права |
|---|---|
~/.ssh | 700 |
~/.ssh/authorized_keys | 600 |
~/.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-сервера.