123/ssh.md

4.5 KiB
Raw Blame History

Инструкция по настройке SSH и отключению доступа по паролю

1. Генерация SSH-ключа

# Создаём пару ключей (по умолчанию 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:

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@your_server_ip

Или вручную:

  1. Скопировать содержимое файла id_ed25519.pub.
  2. На сервере открыть файл ~/.ssh/authorized_keys (создать, если отсутствует) и вставить ключ в новую строку.
  3. Убедиться, что у файла и каталога правильные права:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

3. Отключение аутентификации по паролю и изменение порта SSH

Редактируем конфигурацию SSH демона (/etc/ssh/sshd_config):

sudo nano /etc/ssh/sshd_config

Найдите или добавьте/измените следующие строки:

# Изменяем порт (например, на 2222)
Port 2222

# Отключаем вход по паролю
PasswordAuthentication no

# Оставляем только публичный ключ
PubkeyAuthentication yes

# (опционально) запрещаем вход root напрямую
PermitRootLogin prohibit-password

Сохраните файл и выйдите.

Перезапуск SSH службы

# Для систем с systemd
sudo systemctl restart sshd

# Или для старых систем
sudo service ssh restart

Важно: Не закрывайте текущую SSH-сессию, пока не проверите, что новый вход работает!

Проверка подключения

ssh -p 2222 user@your_server_ip

Если подключение успешно — можно закрыть текущую сессию.

4. Закрытие стандартного порта 22 (опционально)

После подтверждения, что вход на новый порт работает и аутентификация по ключу функционирует, можно закрыть порт 22 в firewall.

Пример для ufw (Ubuntu/Debian)

sudo ufw deny 22/tcp
sudo ufw allow 2222/tcp
sudo ufw reload

Пример для firewalld (CentOS/RHEL)

sudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload

Пример для iptables

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-ключу.