Введение / Зачем это нужно
SSH (Secure Shell) — это стандарт для безопасного удалённого управления серверами и сетевыми устройствами. Настройка SSH-сервера на вашем Linux-компьютере позволяет:
- Управлять сервером удалённо из любой точки мира через зашифрованный канал.
- Передавать файлы безопасно с помощью
scpилиsftp. - Запускать команды и скрипты на сервере без физического доступа.
Этот гайд проведёт вас через процесс установки и базовой настройки SSH-сервера на самых популярных дистрибутивах Linux, сделав ваш сервер доступным и защищённым.
Требования / Подготовка
Перед началом убедитесь, что у вас есть:
- Доступ к серверу с правами
sudo(администратора). - Стабильное сетевое подключение и известный IP-адрес или доменное имя сервера.
- Клиентская утилита SSH на компьютере, с которого будете подключаться (обычно входит в состав macOS и большинства дистрибутивов Linux; для Windows можно использовать PowerShell или PuTTY).
- Базовые знания командной строки Linux.
Установка и базовая настройка
Шаг 1: Установка OpenSSH-сервера
OpenSSH — это стандартная реализация SSH в мире open-source. Установите пакет openssh-server:
Для Ubuntu/Debian:
sudo apt update
sudo apt install openssh-server -y
Для CentOS/RHEL/Rocky:
sudo dnf install openssh-server -y
# Или для CentOS 7:
# sudo yum install openssh-server -y
Эта команда установит демон sshd и все необходимые зависимости.
Шаг 2: Проверка статуса службы
После установки служба должна запуститься автоматически. Проверим это:
sudo systemctl status ssh
# В некоторых дистрибутивах (CentOS) служба может называться `sshd`:
# sudo systemctl status sshd
Вы должны увидеть статус active (running). Если служба не запущена, запустите её и включите автозагрузку:
sudo systemctl enable --now ssh
Шаг 3: Настройка фаервола
Сервер теперь работает, но системный фаервол может блокировать входящие подключения на порт 22. Нужно добавить правило.
Если используется UFW (Ubuntu/Debian по умолчанию):
sudo ufw allow 22/tcp
sudo ufw reload
Если используется firewalld (CentOS/RHEL по умолчанию):
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
Шаг 4: Проверка подключения с клиента
С этого момента вы можете попробовать подключиться к серверу с другого компьютера в той же сети:
ssh username@ip_адрес_сервера
Где username — ваше имя пользователя на сервере, а ip_адрес_сервера — его локальный или публичный IP. Если всё настроено верно, система запросит пароль пользователя.
Повышение безопасности
Простой пароль — это слабое звено. Давайте настроим более безопасную аутентификацию по SSH-ключам.
Шаг 5: Генерация пары ключей на клиенте
На вашем локальном компьютере (клиенте) выполните команду:
ssh-keygen -t ed25519 -C "ваш_email@example.com"
-t ed25519— современный и безопасный алгоритм.-C— комментарий (обычно email).
Нажмите Enter, чтобы сохранить ключ в папке по умолчанию (~/.ssh/id_ed25519). Рекомендуется задать сложную парольную фразу (passphrase) для дополнительной защиты приватного ключа.
Шаг 6: Копирование публичного ключа на сервер
Существует два простых способа:
Способ A (рекомендуется, если уже есть доступ по паролю):
ssh-copy-id username@ip_адрес_сервера
Эта команда сама создаст нужные папки и скопирует ваш публичный ключ (~/.ssh/id_ed25519.pub) в файл ~/.ssh/authorized_keys на сервере.
Способ B (ручной):
- На клиенте выведите содержимое публичного ключа:
cat ~/.ssh/id_ed25519.pubи скопируйте всю строку. - На сервере (подключившись по паролю) создайте/отредактируйте файл:
mkdir -p ~/.ssh echo "скопированная_строка_ключа" >> ~/.ssh/authorized_keys - Установите строгие права доступа:
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
Шаг 7: Тестирование входа по ключу и отключение пароля
- Сначала откройте новое окно терминала и попробуйте подключиться заново:
ssh username@ip_адрес_сервера
Теперь система должна запросить парольную фразу ключа, а не пароль пользователя. - Если вход по ключу работает, отключите аутентификацию по паролю в главном конфигурационном файле сервера. Откройте его для редактирования:
sudo nano /etc/ssh/sshd_config - Найдите и измените/добавьте следующие строки:
PasswordAuthentication no PubkeyAuthentication yes - Перезапустите службу SSH, чтобы изменения вступили в силу:
sudo systemctl restart ssh
⚠️ Важно: Перед перезагрузкой убедитесь, что вход по ключу работает! В противном случае вы можете потерять доступ к серверу.
Шаг 8: Дополнительные меры безопасности (опционально)
- Смена порта SSH: В том же файле
/etc/ssh/sshd_configнайдите#Port 22, снимите#и измените 22 на другой незанятый порт (например,Port 22222). Не забудьте открыть новый порт в фаерволе. - Запрет root-доступа: Установите
PermitRootLogin no. Это не даёт подключаться пользователюrootнапрямую. - Ограничение пользователей: Директива
AllowUsers your_usernameразрешит подключение только указанным пользователям.
После каждого изменения конфигурации обязательно перезапускайте службу sudo systemctl restart ssh.
Проверка результата
- Попробуйте подключиться с клиента. Должен запроситься парольная фраза ключа.
- Проверьте, что порт открыт:
sudo ufw statusилиsudo firewall-cmd --list-all. - Убедитесь, что служба работает:
sudo systemctl is-active ssh. - Попробуйте выполнить удалённую команду:
ssh username@server 'ls -la'.
Если всё работает, вы успешно настроили безопасный SSH-сервер.
Возможные проблемы
- Ошибка "Connection refused" или "No route to host": Проверьте, что IP-адрес верный, сервер включён, а фаервол на сервере и в облачной панели (AWS, Google Cloud и т.д.) разрешает трафик на ваш SSH-порт.
- Ошибка "Permission denied (publickey)": Убедитесь, что публичный ключ корректно скопирован в
~/.ssh/authorized_keysна сервере, а права на папку и файл установлены как700и600соответственно. Проверьте владельца (должен быть целевой пользователь). - После смены порта не могу подключиться: Вы сменили порт на сервере, но не открыли его в фаерволе. Также при подключении нужно явно указать порт:
ssh -p 22222 user@server. - Служба не запускается после редактирования
sshd_config: В конфигурационном файле есть синтаксическая ошибка. Проверьте её командойsudo sshd -t.