SSH — это базовый и самый удобный способ удалённо заходить на Linux-сервер, но именно из-за своей доступности он часто становится целью перебора паролей и других атак. Если настроить SSH один раз правильно, сервер будет и удобным в работе, и заметно более безопасным.
Что такое SSH и зачем он нужен
SSH (Secure Shell) — это сетевой протокол, который создаёт защищённое соединение между вашим компьютером и удалённым Linux-сервером. В отличие от устаревших telnet или rlogin, весь трафик шифруется: логины, пароли, команды и передаваемые файлы невозможно перехватить в открытом виде. По умолчанию SSH работает поверх TCP на порту 22.
На практике SSH нужен для трёх типичных задач:
- подключиться к VPS или выделенному серверу;
- администрировать домашний или рабочий Linux-узел;
- передавать файлы и выполнять команды без физического доступа к машине.
Именно через SSH вы будете настраивать веб-серверы, базы данных, смотреть логи и запускать скрипты. Это инструмент, с которого начинается работа любого системного администратора.
Как устроено подключение по SSH
В SSH участвуют две стороны:
- клиент — ваш ноутбук, ПК или другой сервер;
- сервер — Linux-машина, к которой вы подключаетесь.
Подключение обычно выглядит так:
ssh username@server_ip
Если сервер слушает нестандартный порт:
ssh -p 2222 username@server_ip
При первом подключении клиент запоминает уникальный отпечаток (fingerprint) серверного ключа. Это защита от атак «человек посередине»: если сервер внезапно «стал другим», клиент предупредит вас о подмене. Внутри сессии все данные шифруются с использованием симметричного шифрования, а для аутентификации могут применяться пароли или ключи.
Самый безопасный способ входа: ключи, а не пароль
Для новичка главный шаг к нормальной защите SSH — перейти с пароля на SSH-ключи. Пароль можно подобрать или перехватить, а ключевая пара длиной 2048 бит и выше делает перебор практически невозможным. Ключевая пара состоит из:
- приватного ключа — хранится только у вас;
- публичного ключа — добавляется на сервер.
Сервер проверяет не пароль, а наличие соответствующего приватного ключа у клиента. Это намного безопаснее, чем вход по обычному паролю, особенно если сервер доступен из интернета.
Как выглядит схема
- На своём компьютере создаёте пару ключей.
- Публичный ключ загружаете на сервер.
- Подключаетесь по ключу.
- После проверки убеждаетесь, что вход по ключу работает.
- Только потом отключаете парольный вход.
Пример создания ключа
ssh-keygen -t ed25519 -C "[email protected]"
Этот вариант считается хорошим стандартом для новых систем. Ed25519 обеспечивает высокую криптостойкость при небольшой длине ключа. Если нужен пароль на сам ключ, его стоит задать: это защитит ключ, если файл попадёт в чужие руки. Пароль запрашивается при каждом использовании ключа, но его можно кэшировать с помощью ssh-agent.
Как добавить ключ на сервер
ssh-copy-id username@server_ip
Если ssh-copy-id недоступен, публичный ключ можно вручную добавить в файл:
cat ~/.ssh/id_ed25519.pub | ssh username@server_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
После копирования обязательно проверьте права: каталог ~/.ssh должен иметь режим 700, а authorized_keys — 600. Слишком открытые права — частая причина, по которой SSH отказывается принимать ключ.
Базовая настройка SSH на сервере
Главный конфигурационный файл обычно находится здесь:
/etc/ssh/sshd_config
Именно в нём задаются правила входа. Перед изменениями всегда делайте копию:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
Что стоит проверить в первую очередь
| Параметр | Что делает | Рекомендуемое значение |
|---|---|---|
PermitRootLogin |
Разрешает ли вход под root | no или prohibit-password |
PasswordAuthentication |
Разрешает ли вход по паролю | no после настройки ключей |
PubkeyAuthentication |
Разрешает ли вход по ключам | yes |
Port |
Порт SSH-сервера | Любой нестандартный при необходимости |
AllowUsers |
Ограничивает список пользователей | Только нужные аккаунты |
Что обязательно отключить и почему
1. Вход под root
Прямой вход под root — плохая практика. Если кто-то подберёт доступ, он сразу получит максимальные права. Лучше использовать обычного пользователя и повышать права через sudo. Для этого в sshd_config ставят:
PermitRootLogin no
Иногда на переходном этапе используют:
PermitRootLogin prohibit-password
Это означает, что root не сможет входить по паролю, но ключевой доступ ещё разрешён. Для новичков безопаснее всё же полностью отключить root-вход, если нет особой причины оставлять его.
2. Парольный вход
После того как ключи проверены и вход по ним работает, парольный вход лучше отключить:
PasswordAuthentication no
Это резко снижает риск перебора паролей. Даже сложный пароль остаётся уязвимым для автоматических атак, в то время как ключ практически невозможно подобрать.
3. Лишние аккаунты
Чем меньше пользователей могут входить по SSH, тем лучше. Если сервером пользуются двое-трое человек, не стоит держать там десяток старых учёток «на всякий случай». Можно ограничить доступ так:
AllowUsers user1 user2
Все остальные системные или забытые учётные записи не смогут подключиться, даже если у них есть ключи.
Нужно ли менять порт SSH
Да, но с оговоркой: смена порта не делает сервер защищённым сама по себе. Это не защита, а скорее уменьшение шума от автоматических сканеров, которые массово проверяют стандартный порт 22. Если вы решите сменить порт, делайте это аккуратно:
- сначала откройте новый порт в firewall;
- затем добавьте его в конфиг SSH;
- перезапустите службу;
- проверьте вход во второй сессии;
- только потом закрывайте старый порт.
Пример
Port 2222
Типичная ошибка
Новичок меняет порт в конфиге, но забывает открыть его в firewall. В итоге сервер остаётся без удалённого доступа. Чтобы не попасть в такую ситуацию, всегда оставляйте уже открытое SSH-соединение до полной проверки нового входа.
Как проверить конфигурацию перед перезапуском
Перед перезапуском SSH проверьте синтаксис конфигурации:
sudo sshd -t
Если команда ничего не вывела — это хороший знак: конфиг не содержит ошибок синтаксиса. Расширенный вывод можно получить с флагом -T, чтобы увидеть, какие именно настройки будут применены.
После этого можно перезапустить службу:
sudo systemctl restart ssh
На некоторых дистрибутивах служба может называться sshd:
sudo systemctl restart sshd
Минимальный безопасный набор настроек
Ниже — практичный стартовый вариант для небольшого Linux-сервера.
Port 2222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AllowUsers youruser
Это не «магическая защита», а нормальная база, с которой уже можно жить. Такой конфиг закрывает самые очевидные дыры и заставляет злоумышленника искать более сложные пути.
Защита от перебора: зачем нужен fail2ban
Если SSH доступен из интернета, кто-то рано или поздно начнёт подбирать пароль или проверять слабые настройки. Для этого часто используют fail2ban — инструмент, который смотрит логи и временно блокирует адреса с подозрительной активностью.
Принцип работы простой:
- сервис пишет ошибки входа в журнал;
- fail2ban видит повторяющиеся неудачные попытки;
- IP-адрес нарушителя временно блокируется через firewall (iptables или nftables);
- через заданное время блокировка снимается.
Когда fail2ban особенно полезен
- сервер открыт в интернет;
- SSH доступен на стандартном порту;
- есть риск брутфорса по паролям;
- на сервере пока ещё не всё идеально настроено.
Базовые параметры, которые важно понимать
| Параметр | Смысл |
|---|---|
maxretry |
Сколько ошибок допускается до блокировки |
findtime |
За какой промежуток считаются попытки |
bantime |
На сколько банится IP |
ignoreip |
Какие адреса никогда не блокировать |
Для домашнего или небольшого рабочего сервера часто используют умеренные значения: несколько попыток, окно 10 минут и бан на 10–60 минут. Не ставьте бан навсегда — вы рискуете заблокировать сами себя при ошибке.
Пошаговый порядок настройки SSH для новичка
Шаг 1. Создайте ключ на своём компьютере
ssh-keygen -t ed25519 -C "[email protected]"
Шаг 2. Скопируйте ключ на сервер
ssh-copy-id username@server_ip
Шаг 3. Проверьте вход по ключу
ssh username@server_ip
Шаг 4. Отредактируйте конфиг SSH
Проверьте и, если нужно, измените:
sudo nano /etc/ssh/sshd_config
Шаг 5. Проверьте синтаксис
sudo sshd -t
Шаг 6. Перезапустите SSH
sudo systemctl restart ssh
Шаг 7. Откройте новую сессию и протестируйте вход
Не закрывайте старую сессию, пока не убедитесь, что новый вход работает.
Шаг 8. Настройте firewall и fail2ban
Добавьте защиту от перебора и проверьте, что ssh-доступ открыт только там, где нужно.
Частые ошибки новичков
- Отключили парольный вход до того, как проверили ключи.
- Сменили порт, но не открыли его в firewall.
- Оставили root-вход включённым «пока временно».
- Забыли, что SSH-сервис может называться по-разному на разных системах.
- Потеряли доступ из-за ошибки в
sshd_configи не оставили резервную сессию. - Считают, что один только нестандартный порт решает вопрос безопасности.
- Установили слишком открытые права на файлы ключей (например, 644 вместо 600) — SSH молча отказывает в аутентификации.
Практический чек-лист безопасности SSH
- [ ] Вход по ключу работает.
- [ ] Парольный вход отключён.
- [ ] Root-вход отключён или строго ограничен.
- [ ] Открыт только нужный порт.
- [ ] Лишние пользователи удалены или отключены.
- [ ] Установлен и настроен fail2ban.
- [ ] Есть резервный способ доступа на случай ошибки.
- [ ] Конфиг проверен командой
sshd -t. - [ ] Права на
~/.sshиauthorized_keysкорректны (700 и 600).
Если доступ уже есть, но всё настроено плохо
Иногда сервер приходится «спасать» уже после запуска. В этом случае порядок такой:
- Открыть вторую активную SSH-сессию.
- Настроить ключи.
- Проверить вход по ключу.
- Исправить
sshd_config. - Проверить синтаксис.
- Перезапустить SSH.
- Убедиться, что повторный вход работает.
- Только после этого закрыть пароли и root-доступ.
Вывод
SSH сам по себе не опасен — опасна его типичная неправильная настройка. Если сразу перейти на ключи, отключить root-вход, убрать парольную аутентификацию, ограничить пользователей и добавить защиту от перебора, сервер становится значительно спокойнее и надёжнее в эксплуатации.
FAQ
Можно ли оставить SSH с паролем, если сервер домашний?
Можно, но это слабее, чем вход по ключу. Если сервер доступен из интернета, лучше не полагаться на пароль. Даже в домашней сети пароль может быть скомпрометирован вредоносным ПО.
Обязательно ли менять порт SSH?
Нет. Это не обязательная мера. Смена порта уменьшает шум от автоматических сканеров, но не заменяет нормальную аутентификацию и firewall. Основная защита — ключи и отключение паролей.
Что важнее: fail2ban или ключи?
Сначала — ключи и отключение паролей. Потом уже fail2ban как дополнительный слой защиты. Если парольная аутентификация отключена, fail2ban всё равно полезен для блокировки сканирований и попыток подбора ключей (хотя последнее маловероятно).
Почему после изменений SSH перестал пускать?
Чаще всего причина в ошибке конфигурации, закрытом порте или неправильных правах на ключи. Всегда проверяйте конфиг командой sshd -t и не закрывайте рабочую сессию до теста.
Что делать, если потерял приватный ключ?
Нужно создать новую пару ключей и добавить публичную часть на сервер. Старый ключ лучше удалить из authorized_keys. Если доступ к серверу ещё есть по другому ключу или через консоль, сделайте это сразу. В противном случае придётся использовать аварийный доступ (например, через панель управления VPS).
