#Что происходит и когда это важно
Клиент получает Permission denied (publickey), а серверный журнал прямо указывает bad ownership or modes for directory .... Каталог в сообщении может находиться в пути пользователя либо в пути программы AuthorizedKeysCommand.
#Возможные причины и как их отличить
| Возможная причина | Как узнать | Что делать |
|---|---|---|
Домашний каталог доступен на запись постороннимStrictModes проверяет не только .ssh, но и составляющие пути. | Журнал содержит путь к home или .ssh. | Проверить владельца/разрешения только затронутых элементов. |
| Неверный владелец authorized_keysФайл принадлежит другому пользователю после копирования. | namei -l показывает чужого владельца. | Восстановить назначенного владельца после проверки учётной записи. |
| Небезопасен путь AuthorizedKeysCommandСкрипт проверки ключей или родительский каталог изменяемы не тем пользователем. | В ошибке показан путь к исполняемому файлу, а не home. | Проверить путь скрипта по отдельным правилам sshd. |
#Пошаговая диагностика и исправление
- Сохраните действующий доступЕсли SSH ещё работает в одном сеансе, не закрывайте его. Откройте консоль провайдера/локальный доступ. Не пытайтесь устранить ошибку отключением StrictModes: это снижает безопасность проверки ключей.
- Найдите отказ именно в журнале сервераНа сервере выполните
sudo journalctl -u ssh -b -n 100 --no-pagerдля Debian/Ubuntu илиsudo journalctl -u sshd -b -n 100 --no-pagerна системе с таким названием службы. Ищите точный путь послеbad ownership or modes; если sshd пишет про AuthorizedKeysCommand, не меняйте домашний каталог пользователя без необходимости. - Сверьте учётную записьВыполните
getent passwd ИМЯ_ПОЛЬЗОВАТЕЛЯи найдите домашний каталог. Убедитесь, что это действительно пользователь, под которым требуется войти, и что пути в журнале относятся к нему. Если каталог находится на NFS/сетевом томе, оцените особенности прав. - Просмотрите весь путь без измененияВыполните
namei -l /ПУТЬ/ИЗ_ЖУРНАЛА; замените пример фактическим путём. Вывод покажет каждого владельца и режим родительских каталогов. Дляauthorized_keysпроверьте.sshи сам файл отдельно черезls -ld, не делайтеchmod -Rна весь home. - Сверьте политику sshdАдминистратор запускает
sudo sshd -Tдля общих настроек илиsudo sshd -T -C user=ИМЯ,host=ИМЯ_ХОСТА,addr=IPдля правил Match с фактическими значениями. Найдите StrictModes, AuthorizedKeysFile и AuthorizedKeysCommand. Если sshd отсутствует в PATH, используйте штатный путь вашей системы; не меняйте конфигурацию до проверки. - Исправляйте права только найденного объектаЕсли подтверждено, что конкретный каталог ошибочно доступен на запись группе или остальным, администратор убирает именно эти биты на нём после согласования. Обычно
.sshпринадлежит пользователю и закрыт от остальных;authorized_keysне должен быть изменяем посторонними. Для AuthorizedKeysCommand действуют требования к владельцу root и пути исполняемого файла. Не выполняйте команды chown/chmod по шаблонному пути без оценки ACL, NFS и реального владельца. - Повторите вход новым сеансомНе закрывая старый сеанс, на клиенте выполните
ssh -v пользователь@серверсо своими данными. Убедитесь, что ключ принят. Если ошибок нет, проверьте журнал, а затем можно завершать резервный сеанс. Если не помогло, верните ровно те права, которые изменяли, и продолжите диагностику.
#Команды из инструкции с пояснениями
getent passwd ИМЯ_ПОЛЬЗОВАТЕЛЯnamei -l /ПУТЬ/ИЗ_ЖУРНАЛАsudo sshd -T#Как проверить результат
Новый вход с допустимым ключом проходит, в журнале нет bad ownership/modes, при этом отсутствует доступ на запись к ключам у посторонних.
#Если проблема не устранена
Если путь находится на NFS, SELinux или используется AuthorizedKeysCommand, потребуется адресная помощь администратора; отключение StrictModes не является исправлением.