# Инструкция по настройке SSH и отключению доступа по паролю ## 1. Генерация SSH-ключа ```bash # Создаём пару ключей (по умолчанию RSA 2048 бит, можно указать тип и размер) ssh-keygen -t ed25519 -C "your_email@example.com" ``` - При запросе расположения файла нажмите Enter (по умолчанию `~/.ssh/id_ed25519`). - При желании задайте пароль (passphrase) для защиты ключа. Оставьте пустым, если не нужен пароль при каждом использовании. Получится два файла: - `~/.ssh/id_ed25519` — приватный ключ (никогда не передавайте его!) - `~/.ssh/id_ed25519.pub` — публичный ключ, который нужно разместить на сервере. ## 2. Копирование публичного ключа на сервер Если у вас уже есть доступ к серверу по паролю (или другому методу), можно использовать `ssh-copy-id`: ```bash ssh-copy-id -i ~/.ssh/id_ed25519.pub user@your_server_ip ``` Или вручную: 1. Скопировать содержимое файла `id_ed25519.pub`. 2. На сервере открыть файл `~/.ssh/authorized_keys` (создать, если отсутствует) и вставить ключ в новую строку. 3. Убедиться, что у файла и каталога правильные права: ```bash chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys ``` ## 3. Отключение аутентификации по паролю и изменение порта SSH Редактируем конфигурацию SSH демона (`/etc/ssh/sshd_config`): ```bash sudo nano /etc/ssh/sshd_config ``` Найдите или добавьте/измените следующие строки: ``` # Изменяем порт (например, на 2222) Port 2222 # Отключаем вход по паролю PasswordAuthentication no # Оставляем только публичный ключ PubkeyAuthentication yes # (опционально) запрещаем вход root напрямую PermitRootLogin prohibit-password ``` Сохраните файл и выйдите. ### Перезапуск SSH службы ```bash # Для систем с systemd sudo systemctl restart sshd # Или для старых систем sudo service ssh restart ``` **Важно:** Не закрывайте текущую SSH-сессию, пока не проверите, что новый вход работает! ### Проверка подключения ```bash ssh -p 2222 user@your_server_ip ``` Если подключение успешно — можно закрыть текущую сессию. ## 4. Закрытие стандартного порта 22 (опционально) После подтверждения, что вход на новый порт работает и аутентификация по ключу функционирует, можно закрыть порт 22 в firewall. ### Пример для ufw (Ubuntu/Debian) ```bash sudo ufw deny 22/tcp sudo ufw allow 2222/tcp sudo ufw reload ``` ### Пример для firewalld (CentOS/RHEL) ```bash sudo firewall-cmd --permanent --remove-service=ssh sudo firewall-cmd --permanent --add-port=2222/tcp sudo firewall-cmd --reload ``` ### Пример для iptables ```bash sudo iptables -A INPUT -p tcp --dport 22 -j DROP sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT sudo netfilter-persistent save # если используется сохранение правил ``` ## 5. Итоги - Вы сгенерировали пару SSH-ключей (приватный остаётся у вас, публичный размещён на сервере). - Настроили SSH-демон на использование ключевой аутентификации, отключили вход по паролю и изменили порт с 22 на выбранный (например, 2222). - Проверили подключение по новому порту и закрыли доступ к порту 22 через firewall. Теперь ваш сервер защищён от brute-force атак по порту 22 и допускает только авторизацию по SSH-ключу.