Почему SSH запрашивает пароль, если я отключил запрос пароля в настройках?

Как настроить SSH таким образом, чтобы пользователи могли авторизовываться только с использованием ключей, и при этом избежать необходимости устанавливать fail2ban на каждом сервере, позволяя им взаимодействовать по SSH?
  • 9 января 2024 г. 6:38
Ответы на вопрос 2
Для того чтобы настроить SSH так, чтобы пользователи могли авторизовываться только с использованием ключей, вам необходимо сделать следующее:

1. **Создайте пару ключей SSH (если у вас еще нет)**:
   - Запустите в своём терминале `ssh-keygen` и следуйте инструкциям (на компьютере пользователя).
   - Сохраните публичный ключ, который обычно находится в `~/.ssh/id_rsa.pub` (или аналогичный файл, в зависимости от выбранного типа ключа).

2. **Добавьте публичный ключ на сервер**:
   - Скопируйте публичный ключ на сервер с помощью `ssh-copy-id user@host`, где `user` - имя пользователя на сервере, а `host` - имя сервера или IP-адрес.

3. **Настройте SSH-демон на сервере (sshd_config)**:
   - Откройте файл конфигурации SSH-демона (обычно `/etc/ssh/sshd_config`) на сервере с помощью текстового редактора, например, с помощью команды `sudo nano /etc/ssh/sshd_config` или `sudo vi /etc/ssh/sshd_config`.
   - Найдите и измените или добавьте следующие строки:

     ```
     ChallengeResponseAuthentication no
     PasswordAuthentication no
     UsePAM no
     PermitRootLogin without-password
     PubkeyAuthentication yes
     ```

     Убедитесь, что `PermitRootLogin` установлено в `without-password` (или `prohibit-password` в некоторых версиях SSH), чтобы предотвратить вход под пользователем root без ключа SSH (или полностью отключить вход для root, если это уместно для вашей конфигурации).

4. **Перезапустите SSH**:
   - Сохраните изменения и закройте файл конфигурации.
   - Перезапустите SSH-демон, чтобы применить изменения, используя команду `sudo systemctl restart sshd` на большинстве современных систем или `sudo service ssh restart` на старых системах.
   
Если после этих настроек SSH все ещё запрашивает пароль, убедитесь в следующем:

- Публичный ключ зарегистрирован в файле `~/.ssh/authorized_keys` на стороне сервера для соответствующего пользователя.
- Личные ключи доступны и загружены на клиентской машине (по умолчанию это `~/.ssh/id_rsa`, но их можно указать вручную при подключении с помощью флага `-i /путь/к/ключу`).
- Права доступа к файлам SSH на клиенте и сервере корректны: директория `~/.ssh` должна иметь права доступа 700 (drwx------), а файлы внутри неё - 600 (rw-------) для личных ключей и 644 (rw-r--r--) для публичного ключа и `authorized_keys`.
- Кэш SSH-агента не содержит предыдущие ключи которые могут конфликтовать. Посмотреть загруженные ключи можно с помощью `ssh-add -l`, а очистить кэш с помощью `ssh-add -D`.

После корректной настройки вам не будет нужно устанавливать `fail2ban`, чтобы блокировать попытки входа с помощью пароля, так как такие попытки будут полностью отключены настройками SSH. Тем не менее, `fail2ban` может предоставить дополнительный уровень безопасности, блокируя повторяющиеся попытки входа даже без пар
Давай начнем с простого: 
sudo service sshd restart
делал?
Ключи то для доступа, надеюсь сделал? Вообще, пока не настроен доступ по ключу для какого то пользователя, блокировать доступ по паролю не рекомендуется.
Сделай еще строку вида:
AllowUsers user0 user1 user2
Чтобы только указанные пользователи могли аутентифицироваться, сразу отсеешь 90% пионерских атак.
не хочу настраивать на каждой виртуалке fail2ban

А fail2ban ты рассматриваешь только как способ защиты от подбора пароля ssh сессии?
Похожие вопросы