Permission denied обычно означает отказ на этапе аутентификации или проверки политики доступа. Не удаляйте запись файла known_hosts и не отключайте проверку ключа хоста, пока не сверите новый отпечаток ключа SSH по независимому доверенному каналу. Для диагностики сопоставляйте вывод клиента с эффективной конфигурацией и журналами сервера.Не обходите проверку подлинности хоста
REMOTE HOST IDENTIFICATION HAS CHANGED флагами отключения проверки ключа хоста или безусловным удалением known_hosts. Такое предупреждение может означать переустановку системы, пересоздание VM или смену адреса, но также подмену узла между клиентом и сервером. Если смена не была запланирована или вызывает сомнения, действуйте как при потенциальном инциденте: сохраните сведения и используйте процедуру реагирования на взлом сервера.Сначала определите этап, на котором остановился SSH
OpenSSH устанавливает TCP-соединение, согласует криптографические параметры, проверяет ключ удалённого хоста и только затем аутентифицирует пользователя. Поэтому одна и та же внешняя картина — «не могу войти» — имеет разные причины и требует разных действий.
Диагностическое дерево по сообщению клиента
| Симптом | Этап | Что это обычно означает | Первое безопасное действие |
|---|---|---|---|
REMOTE HOST IDENTIFICATION HAS CHANGED!, Host key verification failed | Проверка хоста до аутентификации | Предъявленный ключ хоста не совпал с сохранённым для имени или адреса | Подтвердить новый отпечаток по консоли, BMC, инвентаризации или подтверждённому каналу с владельцем |
Permission denied (publickey) | Аутентификация пользователя | Сервер не завершил аутентификацию предложенным ключом или доступ запрещён политикой | Проверить выбранный ключ, authorized_keys, права, эффективную конфигурацию sshd и журналы |
Too many authentication failures | Аутентификация пользователя | До нужного ключа клиент или агент предложил слишком много других ключей | Ограничить набор ключей на стороне конкретного клиента |
no matching host key type, no matching signature algorithm | Согласование алгоритмов | У клиента и сервера нет совместимого разрешённого алгоритма | Сопоставить версии, криптополитику и конфигурации с обеих сторон |
sshd: no hostkeys available | Запуск или работа сервера | sshd не нашёл пригодного закрытого ключа хоста либо не может его прочитать | Проверить HostKey, наличие, владельца, права и журналы через консоль |
Connection closed by remote host, разрыв после Connection established | После TCP или во время SSH-обмена | Соединение закрыл сервер, промежуточное устройство или удалённая сторона пути | Зафиксировать время, запустить подробный вывод и сопоставить его с серверными журналами |
Как читать ssh -v и почему одного вывода клиента недостаточно
Диагностические ключи, формат строк и доступные параметры зависят от версии OpenSSH. Ориентируйтесь на man-страницы ssh(1) и ssh_config(5) той системы, где запускается клиент. Обычно -v достаточно для первичной проверки, а -vvv показывает выбор конфигурации, файлов ключей и ход аутентификации подробнее.
ssh -vvv user@example.example- Строки о
Connecting toиConnection establishedподтверждают попытку TCP-подключения, но не доказывают, что дальше отвечает именно ожидаемый sshd. - Строки вида
Server host key:илиHost key verification failedотносятся к проверке сервера и предшествуют аутентификации пользователя. Offering public keyозначает, что клиент предлагает ключ;Server accepts keyозначает, что сервер согласился на этот ключ и запросил подпись. Если после этого вход не завершился, ищите дальнейшие сообщения и серверные журналы.Authentications that can continue: publickey,password— перечень методов, допустимых сервером на этом этапе. Он не доказывает, что конкретный уже предложенный ключ был отвергнут именно из-за отсутствия вauthorized_keys.Connection closed by ...на стороне клиента фиксирует факт закрытия сокета. Без журналов сервера, прокси или сетевого устройства нельзя надёжно приписать разрыв сети, sshd либо промежуточному устройству.
Если TCP-соединение не устанавливается
No route to host, Connection refused, ошибки DNS, маршрутизации и IP-адресации находятся за рамками этой статьи и требуют отдельной сетевой диагностики. Если есть признаки фильтрации пакетов, начните с политики firewall сервера, а для UFW и firewalld используйте отдельную инструкцию.SSH host key changed: как безопасно подтвердить смену ключа
Предупреждение REMOTE HOST IDENTIFICATION HAS CHANGED означает, что клиент получил для указанного имени или адреса ключ, отличный от сохранённого ранее. Легитимные причины: VM пересоздали, ОС переустановили, ключи хоста заменили в плановом порядке, DNS-имя или IP теперь указывает на другой узел, либо за балансировщиком оказался иной сервер. Но те же симптомы возможны при атаке «человек посередине» или компрометации инфраструктуры.
Безопасная обработка предупреждения о смене host key
Выполняйте действия через независимый от проблемного SSH канал: локальную консоль, консоль провайдера, BMC или заранее подтверждённый контакт владельца узла.
- 1Зафиксируйте имя, адрес и старый отпечатокСохраните полный текст предупреждения: клиент обычно указывает тип ключа, новый отпечаток и строку прежней записи. Проверьте, к какому имени, IP и порту подключались. Это помогает обнаружить изменение DNS, адреса или порта.
- 2Получите отпечаток с самого сервераЧерез доверенную консоль найдите ключ хоста того типа, который указан клиентом, и вычислите его отпечаток. Например, для Ed25519 обычно проверяют публичный файл
/etc/ssh/ssh_host_ed25519_key.pub. Ожидаемый результат — отпечаток совпадает с тем, который показал клиент. Несовпадение означает, что запись удалять нельзя: проверьте адресацию, DNS и признаки инцидента. - 3Проверьте, что изменение ожидаемоСопоставьте отпечаток с инвентаризацией, заявкой на замену, данными автоматизации или подтверждением ответственного владельца. Одного факта, что сервер отвечает по нужному IP, недостаточно для подтверждения его подлинности.
- 4Удалите только подтверждённую устаревшую записьПосле подтверждения удалите запись для конкретного имени или адреса через
ssh-keygen -R, затем подключитесь снова и внимательно сравните предъявленный отпечаток с подтверждённым. Команда удаляет л окальную запись, но не подтверждает легитимность нового ключа.
ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pubssh-keygen -F example.examplessh-keygen -R example.exampleПодробнее о проверке отпечатка ключа SSH, создании ключей и устройстве known_hosts — в статье «Безопасная настройка SSH: ключи, root и ограничение доступа».
Permission denied (publickey): что проверить, если ключ есть в authorized_keys
Permission denied (publickey) означает, что аутентификация по открытому ключу не завершилась. Наличие строки в файле authorized_keys — необходимое, но не достаточное условие: клиент может выбрать другой закрытый ключ, сервер может не прочитать файл, а правила доступа могут запретить вход уже после распознавания ключа.
Диагностика ssh permission denied publickey
- 1Явно укажите нужный закрытый ключПодключитесь с
-iиIdentitiesOnly=yes. В подробном выводе должна появиться попытка использовать именно заданный файл. Если вход стал успешным, вероятная причина — прежний выбор идентичностей клиента или лишние ключи агента. Учтите, что другиеIdentityFile, явно заданные в конфигурации, могут сохраняться; итоговые параметры назначения можно посмотреть черезssh -G. - 2Сравните открытый ключ с серверной записьюПолучите открытый ключ из используемого закрытого ключа или сравните отпечатки. Проверьте, что он относится к нужной учётной записи, целая строка присутствует в
authorized_keys, не содержит случайных переносов и её параметры не ограничивают данный сценарий. - 3Проверьте владельца и доступ к путиНа сервере проверьте домашний каталог пользователя,
~/.sshиauthorized_keys. При включённомStrictModessshd может отклонить файл, если он или путь к нему небезопасно доступны для записи другим пользователям. - 4Получите эффективную конфигурацию sshdПроверьте синтаксис и выведите эффективные значения. Учитывайте
Match: для конкретного пользователя, адреса и имени удалённого клиента конфигурация может отличаться от глобальных строк в файле. - 5Сопоставьте попытку с журналом сервераПовторите одну контролируемую попытку входа и сразу найдите событие по времени, имени пользователя и исходному адресу. Журнал обычно показывает более точную причину: небезопасные права, неверный владелец, запрет пользователя, ошибку PAM или отказ ключа.
ssh -vvv -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 user@example.exampleIdentityFile задаёт дополнительный файл идентичности клиента; несколько таких параметров могут накапливаться. IdentitiesOnly yes ограничивает использование идентичностями, явно заданными в конфигурации или командной строке, даже если SSH-агент хранит другие ключи. IdentityAgent задаёт сокет агента либо отключает его для конкретного назначения. PreferredAuthentications меняет порядок и набор предпочитаемых методов, но сам по себе не выбирает конкретный файл ключа. Точное поведение и доступность параметров смотрите в ssh_config(5) используемой версии.
SSH key: неправильные права на закрытый ключ клиента
На Unix-подобных системах OpenSSH обычно отказывается использовать локальный закрытый ключ, если файл доступен другим пользователям. В выводе встречается сообщение наподобие UNPROTECTED PRIVATE KEY FILE! и This private key will be ignored. Это защита секрета, а не ошибка сервера. Точные проверки режимов и ACL зависят от ОС, файловой системы и реализации клиента.
chmod 600 ~/.ssh/id_ed25519 && chmod 700 ~/.sshНе расширяйте права для устранения ошибки
chmod 777 к закрытому ключу, .ssh или authorized_keys. Общая запись позволяет подменить ключи и, в зависимости от объекта, получить доступ к учётной записи. Если права выставлены верно, но клиент всё ещё отказывается от ключа, пр оверьте ACL, владельца, тип файловой системы и сообщения клиента.Права и владельцы authorized_keys на сервере
Директива StrictModes в sshd_config заставляет sshd проверять владельца и режимы файлов пользователя и домашнего каталога до принятия входа. В типичной локальной конфигурации домашний каталог принадлежит пользователю, ~/.ssh имеет режим 700, а ~/.ssh/authorized_keys — 600; они не должны быть доступны на запись группе или всем. Стандартный либо настроенный путь к ключам определяет AuthorizedKeysFile, поэтому не предполагайте, что sshd читает только ~/.ssh/authorized_keys.
namei -l /home/user/.ssh/authorized_keys && ls -ld /home/user /home/user/.ssh && ls -l /home/user/.ssh/authorized_keyschown -R user:user /home/user/.ssh && chmod 700 /home/user/.ssh && chmod 600 /home/user/.ssh/authorized_keysНа системах с SELinux или AppArmor обычные Unix-права могут быть корректны, но доступ sshd всё равно будет запрещён политикой. Не отключайте механизм мандатного контроля для проверки: разберите отказ и контекст по инструкции «SELinux на сервере» либо «AppArmor на сервере».
Too many authentication failures: как ограничить лишние ключи агента
Ошибка Too many authentication failures обычно означает, что sshd исчерпал лимит попыток аутентификации до того, как клиент дошёл до правильного ключа. Ограничение на сервере задаёт MaxAuthTries в sshd_config(5); конкретное значение может быть изменено администратором. Увеличение лимита или отключение его защиты ради одного клиента обычно хуже, чем передать нужный ключ явно.
ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 user@example.exampleHost app-prod
HostName example.example
User user
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
Если необходимо использовать отдельный агент, задайте для этого хоста IdentityAgent в соответствии с ssh_config(5) или временно отключите агент для подключения. PreferredAuthentications publickey может поставить метод ключа первым, но не решает проблему множества ключей без IdentitiesOnly или корректного IdentityAgent. Посмотреть ключи текущего агента обычно можно командой ssh-add -l; не удаляйте ключи из общего агента, если ими пользуются другие сессии или процессы.
Корректный ключ, но вход запрещён: sshd, Match, PAM и учётная запись
Даже принятый ключ не отменяет правила доступа. Вход могут запретить AllowUsers, AllowGroups, DenyUsers, DenyGroups, условия Match, запрет интерактивной оболочки, срок действия или блокировка учётной записи, а также PAM. Внешние источники идентификационных данных — например LDAP или доменные службы — добавляют собственные условия.
sudo sshd -tsudo sshd -T -C user=user,host=client.example.example,addr=192.0.2.10Проверяйте Match именно с параметрами реального подключения: правило может зависеть от пользователя, исходного адреса, имени, локального адреса или порта. Строка в основном файле конфигурации не гарантирует итоговое значение, если используются включаемые фрагменты или более специфичные правила.
Проверка блокировки учётной записи и политик входа
- 1Определите источник учётной записиУстановите, является ли пользователь локальным, каталоговым или управляемым другой системой идентификации. Способ просмотра срока действия, состояния блокировки и снятия блокировки зависит от дистрибутива, PAM-конфигурации и источника данных.
- 2Проверьте запись пользователя и его оболочкуДля локальной записи проверьте, существует ли пользователь, какой у него домашний каталог и разрешена ли оболочка для интерактивного входа. Оболочка вроде
nologinилиfalseможет позволить техническую аутентификацию, но не интерактивную SSH-сессию. - 3Проверьте срок действия и блокировку средствами ОСИспользуйте штатные инструменты и документацию своего дистрибутива или каталога. Не применяйте универсальную команду разблокировки из другого семейства ОС: она может не затронуть PAM, доменную учётную запись или создать несогласованное состояние.
- 4Сопоставьте состояние с журналом sshd и PAMПовторите одну попытку, затем найдите запись по времени. Сообщения вроде account locked, account expired, access denied или PAM error позволяют отделить политику аккаунта от проблем ключа.
getent passwd userДля локальных Linux-учётных записей срок действия и статус часто проверяют штатными утилитами семейства ОС, но их вывод и полномочия различаются. Настройка PAM-политики, сроков действия и процедуры разблокировки разобрана отдельно в «Учётные записи, sudo и парольная политика в Linux».
Где искать журналы sshd
Единого пути к журналу SSH для всех Linux-дистрибутивов нет. В системах с systemd события обычно доступны через journal; в одних семействах дистрибутивов аутентификация дополнительно попадает в /var/log/auth.log, в других — в /var/log/secure. Название systemd-службы также может быть ssh или sshd.
sudo journalctl -u sshd --since '15 minutes ago'sudo grep -Ei 'sshd|Accepted|Failed|authentication|authorized_keys|PAM' /var/log/auth.log /var/log/secure 2>/dev/nullНеподдерживаемый алгоритм, отозванный ключ и no hostkeys available
Проблема
SSH deprecated key algorithm или нет общего алгоритма
Возможные причины
- клиент и сервер используют разные версии OpenSSH с разными значениями по умолчанию
- криптографическая политика ОС отключила алгоритм
- сервер не предлагает современный ключ хоста или не принимает подпись пользовательского ключа
- параметры `HostKeyAlgorithms` или `PubkeyAcceptedAlgorithms` на клиенте либо сервере ограничили совместимость
Решение
Сначала сохраните точный текст ошибки, версии клиента и сервера, реально доступные ключи хоста и эффективную конфигурацию обеих сторон. В ssh_config параметр HostKeyAlgorithms определяет допустимые и предпочитаемые алгоритмы ключей хоста для клиента, а PubkeyAcceptedAlgorithms — алгоритмы подписей, которые клиент может использовать при аутентификации открытым ключом. В sshd_config одноимённые параметры ограничивают соответственно предлагаемые сервером алгоритмы ключей хоста и принимаемые сервером алгоритмы подписей пользовательских ключей. Наличие директив и точное поведение зависят от версии OpenSSH и криптополитики ОС, поэтому сверяйтесь с ssh_config(5), sshd_config(5) и документацией поставщика ОС. Предпочтительное исправление — обеспечить поддержку современного общего алгоритма и планово заменить устаревшие ключи. Временное разрешение старого алгоритма допустимо только после оценки риска, для конкретного назначения и с планом отмены; не включайте его глобально.
Проблема
sshd: no hostkeys available
Возможные причины
- файлы, указанные директивами `HostKey`, отсутствуют
- sshd не может прочитать закрытые файлы ключей из-за пути, владельца, прав или политики доступа
- все найденные ключи отключены настройкой алгоритмов или криптополитикой
Решение
Через консоль проверьте эффективные HostKey, существование и читаемость соответствующих закрытых файлов, а также сообщения запуска sshd. Если ключи были известны и должны сохраниться, восстановите их только из доверенной резервной копии: замена ключа меняет идентичность сервера для всех клиентов. Если ключей действительно нет и восстановить нечего, генерация штатным механизмом OpenSSH, например ssh-keygen -A на системах, где он поддерживается, создаёт стандартные ключи хоста. До генерации зафиксируйте причину и подготовьте способ распространить новые подтверждённые отпечатки; затем проверьте конфигурацию sshd -t и перезапускайте службу только при наличии аварийного канала доступа.
Проблема
ssh key revoked или REVOKED HOST KEY DETECTED
Возможные причины
- ключ хоста помечен маркером `@revoked` в клиентском `known_hosts` либо присутствует в списке или KRL, заданном клиентской директивой `RevokedHostKeys`
- пользовательский ключ или сертификат включён в список либо KRL, заданный серверной директивой `RevokedKeys`
- на клиенте или сервере используется KRL — Key Revocation List, содержащий соответствующий отозванный ключ или сертификат
Решение
Не смешивайте эти случаи. Отзыв ключа хоста защищает клиента от подключения к узлу с известным скомпрометированным или запрещённым серверным ключом; это не то же самое, что предупреждение о смене ключа хоста. Отозванный пользовательский ключ сервер отклонит независимо от его наличия в authorized_keys. На клиенте проверьте записи @revoked и значение RevokedHostKeys; на сервере — значение RevokedKeys. Установите, кто и почему отозвал ключ, затем используйте разрешённый новый ключ либо исправьте ошибочную запись по принятой процедуре управления ключами. Не удаляйте сведения об отзыве только ради восстановления доступа.
Не ослабляйте SSH глобально ради совместимости
StrictModes, не разрешайте устаревшие алгоритмы для всех хостов и не перезапускайте sshd без sshd -t и проверенного аварийного доступа. Изменения конфигурации SSH, выпуск современных ключей и контролируемое применение настроек описаны в «Безопасной настройке SSH».Термины в статье
- OpenSSH
- OpenSSH — свободный набор клиентских и серверных средств SSH для защищённого удалённого доступа, передачи файлов и туннелирования TCP-соединений.
- PAM
- PAM — модульная подсистема Unix-подобных ОС, через которую совместимые службы применяют правила аутентификации, проверки учётной записи, смены паролей и управления сеансами.
- SSH-агент
- SSH-агент — фоновый процесс, хранящий закрытые SSH-ключи в памяти и выполняющий операции подписи по запросу клиента без повторного ввода ключевой фразы.
- sshd_config
- sshd_config — конфигурационны й файл или набор настроек SSH-сервера OpenSSH, определяющий параметры прослушивания, аутентификации, доступа и криптографических алгоритмов.
- Аутентификация по открытому ключу
- Аутентификация по открытому ключу — способ входа в SSH, при котором сервер проверяет подпись клиента по заранее разрешённому открытому ключу, а не по паролю.
- Блокировка учётной записи
- Блокировка учётной записи — временное или административное запрещение входа для аккаунта, обычно после заданного числа неудачных попыток аутентификации.
- Закрытый ключ
- Закрытый ключ — секретная часть асимметричной ключевой пары для создания подписей, расшифрования данных или подтверждения владения ключом при аутентификации.
- Ключ SSH
- Ключ SSH — криптографический ключевой материал для протокола SSH, применяемый для подтверждения личности или проверки подлинности удалённого узла.
- Ключ хоста SSH
- Ключ хоста SSH — криптографическая ключевая пара сервера, которой SSH-служба подтверждает клиенту подлинность узла при установлении соединения.
- Открытый ключ
- Открытый ключ — несекретный ключ асимметричной пары, используемый в зависимости от алгоритма для проверки подписей, шифрования, аутентификации или согласования общего секрета.
- Отпечаток ключа SSH
- Отпечаток ключа SSH — краткое представление хеша открытого SSH-ключа, используемое человеком или системой для проверки его соответствия ожидаемому ключу.
- Файл authorized_keys
- Файл authorized_keys — файл SSH на сервере со списком открытых ключей, которым разрешена аутентификация для конкретной учётной записи пользователя.
- Файл known_hosts
- Файл known_hosts — клиентское хранилище ключей SSH-серверов, используемое для проверки подлинности узла при последующих подключениях к его имени или адресу.
