Не работает SSH ключ: настройка прав на папку .ssh (700) и authorized_keys (600)
Сервер упорно просит пароль, игнорируя публичный SSH-ключ
Вы скопировали публичный SSH-ключ на сервер, но при попытке входа OpenSSH всё равно требует ввести пароль учетной записи либо выдает критическую ошибку Permission denied (publickey,password). В 99% случаев виновником является встроенный механизм безопасности демона SSH (StrictModes): если права доступа к домашней директории, папке .ssh или файлу authorized_keys слишком открыты (например, 777 или 755), сервер намеренно игнорирует ключ, считая конфигурацию небезопасной.
Эталонные права доступа для SSH в Linux
- Выставьте правильные права на домашнюю папку пользователя:
chmod 755 /home/username # Для пользователя root: chmod 700 /root - Установите права 700 на скрытую папку .ssh:
chmod 700 ~/.ssh(Права 700 означают: только владелец может читать, писать и заходить в эту папку; для всех остальных доступ полностью закрыт).
- Установите права 600 на файл со списком ключей authorized_keys:
chmod 600 ~/.ssh/authorized_keys(Права 600 означают: чтение и запись разрешены строго владельцу файла).
- Убедитесь, что владельцем файлов является именно ваш пользователь:
chown -R $USER:$USER ~/.ssh
Команда «всё в одном»: Выполните эту строчку под своим пользователем для мгновенного исправления: chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys && chown -R $USER:$USER ~/.ssh.
Частые вопросы (FAQ)
Почему права 777 на папку .ssh ломают авторизацию?
Права 777 позволяют любому процессу на сервере дописать чужой ключ в ваш файл authorized_keys. Демон SSH считает это критической уязвимостью и отключает аутентификацию по ключу.
Как посмотреть подробный лог подключения для поиска ошибки?
Подключайтесь с флагом подробного вывода: `ssh -vvv user@IP_СЕРВЕРА`. Терминал выведет каждый шаг проверки ключа.
Что проверить в файле /etc/ssh/sshd_config?
Убедитесь, что включены параметры: `PubkeyAuthentication yes` и `AuthorizedKeysFile .ssh/authorized_keys`.
Как проверить лог SSH на стороне самого сервера?
Выполните команду: `sudo tail -n 50 /var/log/auth.log` (в Ubuntu/Debian) или `sudo journalctl -u ssh -e`.