Почему 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` может предоставить дополнительный уровень безопасности, блокируя повторяющиеся попытки входа даже без пар
Давай начнем с простого: <br/> <code>sudo service sshd restart</code> <br/> делал? <br/> Ключи то для доступа, надеюсь сделал? Вообще, пока не настроен доступ по ключу для какого то пользователя, блокировать доступ по паролю не рекомендуется. <br/> Сделай еще строку вида: <br/> <code>AllowUsers user0 user1 user2</code> <br/> Чтобы только указанные пользователи могли аутентифицироваться, сразу отсеешь 90% пионерских атак. <br/> <blockquote>не хочу настраивать на каждой виртуалке fail2ban</blockquote> <br/> А fail2ban ты рассматриваешь только как способ защиты от подбора пароля ssh сессии?
Похожие вопросы