Генерация ключей на клиенте
На вашей локальной машине (не на сервере) выполните:
ssh-keygen -t ed25519 -C "your_email@example.com"
Ed25519 надёжнее RSA и короче по длине. Если нужна совместимость со старыми системами: ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
Программа предложит путь сохранения (оставьте ~/.ssh/id_ed25519) и парольную фразу. Парольную фразу можно не задавать, но тогда ключ не будет защищён локально.
После выполнения появятся два файла:
~/.ssh/id_ed25519— приватный ключ (никогда не передавайте его)~/.ssh/id_ed25519.pub— публичный ключ (копируйте на сервер)
Копирование ключа на сервер
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip
Введите пароль один раз — программа скопирует публичный ключ в ~/.ssh/authorized_keys на сервере.
Проверьте подключение: ssh -i ~/.ssh/id_ed25519 user@server_ip
Если ssh-copy-id недоступен
Скопируйте публичный ключ: cat ~/.ssh/id_ed25519.pub
На сервере:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "содержимое_ключа" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
Отключение входа по паролю
Важно: убедитесь, что SSH-ключ работает, прежде чем отключать пароли.
Отредактируйте /etc/ssh/sshd_config:
PasswordAuthentication no
PubkeyAuthentication yes
ChallengeResponseAuthentication no
Проверка конфигурации: sudo sshd -t
Если ошибок нет: sudo systemctl restart sshd
Откат при проблемах
Если застряли, зайдите на сервер через консоль провайдера (VNC, web-terminal) и верните PasswordAuthentication yes.
Защита от брутфорса
sudo apt install fail2ban
sudo systemctl enable fail2ban
sudo fail2ban-client status sshd
Дополнительные настройки sshd_config
PermitRootLogin prohibit-password
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
Это запретит вход root'у по паролю (только ключ), ограничит попытки и отключает зависшие сессии.
Мультифакторная аутентификация (опционально)
AuthenticationMethods publickey,password
Клиенту придётся сначала пройти проверку ключа, потом ввести пароль.
Комментарии (0)