Категория: Доступ и аутентификацияОбновлено 2026-10-27

PubkeyAuthentication

PubkeyAuthentication это директива сервера OpenSSH (sshd_config), которая определяет, разрешена ли аутентификация по открытому ключу. Она принимает yes или no, а по руководству значение по умолчанию yes. Оставьте её включённой: вход по ключу это метод, на который опирается защищённый сервер, а если выключить её при отключённых паролях, по SSH не сможет войти никто.

PubkeyAuthentication yes и отключённые пароли в sshd_config, а также команды sshd -t и sshd -T для проверки значения
Вход по ключу включён, пароли и keyboard-interactive выключены, затем проверка файла и действующего значения.

Допустимые значения, значение по умолчанию и что директива не решает

В руководстве sshd_config сказано, что PubkeyAuthentication определяет, разрешена ли аутентификация по открытому ключу, и что значение по умолчанию yes; аргумент равен yes или no. У клиента есть собственный переключатель в ssh_config, который руководство ssh_config тоже включает по умолчанию.

Директива это лишь выключатель метода. Какие ключи принимаются, решают другие настройки. AuthorizedKeysFile называет файлы с разрешёнными открытыми ключами, по умолчанию это .ssh/authorized_keys .ssh/authorized_keys2. Относительные пути отсчитываются от домашнего каталога пользователя, раскрываются токены %h, %U, %u и %%, а значение none пропускает пользовательские файлы ключей. PubkeyAcceptedAlgorithms ограничивает допустимые алгоритмы подписи, а ssh -Q PubkeyAcceptedAlgorithms показывает, что поддерживает ваша сборка.

Формат файла описан в статье про authorized_keys. PubkeyAuthentication допускается внутри блоков Match.

Вход только по ключам и проверка действующего значения

Оставьте директиву включённой и отключите два других пути входа по паролю. Это ядро входа только по ключам, описанное в статье про аутентификацию по ключам:

PubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no

Почему нужны оба отключения, объясняют статьи PasswordAuthentication и KbdInteractiveAuthentication. Проверьте файл и прочитайте значения, которые использует sshd:

sudo sshd -t
sudo sshd -T | grep -iE '^(pubkeyauthentication|authorizedkeysfile|strictmodes) '
sudo systemctl reload ssh     # на некоторых дистрибутивах sshd
ssh -v -o PreferredAuthentications=publickey -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 -l deploy your-server

Последнюю команду запускайте из второго терминала, не закрывая первую сессию. Успешный вход sshd записывает как "Accepted publickey for", далее идут пользователь, адрес и отпечаток ключа; прочитать запись можно через sudo journalctl -u ssh (на некоторых дистрибутивах служба называется sshd).

Почему вход по ключу не работает, даже если стоит yes

Большинство сбоев не связано с этой директивой. По руководству, StrictModes, по умолчанию yes, проверяет режимы доступа и владельца файлов пользователя и его домашнего каталога перед тем, как принять вход. Руководство sshd(8) рекомендует, чтобы authorized_keys был доступен пользователю на чтение и запись и недоступен остальным:

chmod 600 ~/.ssh/authorized_keys

Эту ошибку подробно разбирает руководство по Permission denied (publickey).

Взаимодействие с другими настройками и место в усилении защиты

Никогда не задавайте PubkeyAuthentication no как меру усиления защиты. Если AuthenticationMethods требует publickey, а метод выключен, sshd отвергнет конфигурацию: в его исходном коде проверяется, что хотя бы один заданный список выполним, и при неудаче выводится "AuthenticationMethods cannot be satisfied by enabled authentication methods". Эта проверка не видит блоки Match, поэтому продолжайте тестировать.

Ключи это первый фактор в более сильной схеме. Добавьте второй шаг через AuthenticationMethods publickey,keyboard-interactive или используйте аппаратный ключ из статьи про FIDO2 и WebAuthn: PubkeyAuthOptions поддерживает для ключей FIDO значения touch-required и verify-required, а по умолчанию действует none.

Сочетайте ключи с PermitRootLogin no и списком AllowUsers. Порядок работ изложен в руководстве по усилению защиты SSH, дополнительный фактор в руководстве по двухфакторной аутентификации SSH, а о ботах, которые продолжают попытки, рассказывает руководство по защите от подбора паролей.

Связанные термины: sshd_config, Аутентификация по ключам, authorized_keys, PasswordAuthentication, FIDO2 и WebAuthn.

Часто задаваемые вопросы

Какое значение PubkeyAuthentication по умолчанию?

По руководству OpenSSH это yes, то есть вход по ключу разрешён, пока вы не зададите no. Действующее значение проверьте командой sudo sshd -T | grep -i pubkeyauthentication.

Нужно ли ставить PubkeyAuthentication no?

Нет. Вход по ключу это то, на чём держится защищённый сервер. При выключенном методе и отключённых паролях по SSH не войдёт никто, а обязательный publickey в AuthenticationMethods заставит sshd отвергнуть конфигурацию.

Где sshd ищет открытые ключи?

В файлах, названных в AuthorizedKeysFile. По умолчанию это .ssh/authorized_keys и .ssh/authorized_keys2 в домашнем каталоге пользователя. Значение none пропускает пользовательские файлы ключей.

Почему мой ключ отвергается, хотя PubkeyAuthentication равен yes?

Обычные причины: ключа нет в authorized_keys, неверные владелец или права, которые отвергает StrictModes, либо клиент предлагает другой ключ. Прочитайте журнал sshd и запустите ssh -v.

Достаточно ли PubkeyAuthentication yes для входа только по ключам?

Нет. Нужно ещё задать PasswordAuthentication no и KbdInteractiveAuthentication no, иначе пароль или запрос PAM всё ещё могут быть предложены.

Хотите увидеть, в каком состоянии ваш сервер?

Запустите бесплатную read-only проверку сервера или откройте Security Lab и посмотрите цикл обнаружение, сдерживание, восстановление, проверка в действии.

Получить бесплатную проверку сервераОткрыть Security Lab