Если Терминал macOS выдает ошибку «UNPROTECTED PRIVATE KEY FILE» или сообщает, что ваш SSH-ключ слишком доступен, ограничьте доступ к приватному ключу и проверьте каталог .ssh. Откройте Терминал и выполните команду chmod 600 для файла ключа, который вы фактически используете. Это сделает его доступным для чтения и записи только вашей учетной записи; SSH игнорирует файлы закрытых ключей, к которым имеют доступ другие пользователи. Справочное руководство OpenBSD ssh(1)
Исправление прав доступа к приватному ключу
Сначала определите файл ключа. Стандартные имена закрытых ключей по умолчанию в SSH включают id_ed25519 и id_rsa, но у вас может быть другое имя или расположение. Суффикс .pub обозначает публичный ключ; не применяйте это исправление к нему вместо приватного ключа.
Для стандартного ключа Ed25519 введите:
chmod 600 "$HOME/.ssh/id_ed25519"
Для другого ключа замените id_ed25519 на его фактическое имя файла. Заключение пути в кавычки предотвращает интерпретацию пробелов и других специальных символов оболочки в имени файла как синтаксических конструкций. Если ключ находится в другом месте, укажите полный путь к нему внутри кавычек. Значение 600 предоставляет права на чтение и запись владельцу и закрывает доступ для группы и остальных пользователей. Справочное руководство OpenBSD chmod(1)
Вы можете проверить получившиеся права с помощью команды ls -l "$HOME/.ssh/id_ed25519". Обычный вывод начинается с -rw-------; первые три символа прав после типа файла показывают доступ владельца, а остальные группы указывают на отсутствие доступа для группы и остальных. Владельцем файла также должна быть ваша учетная запись. Если он принадлежит другому пользователю, выполнение chmod может завершиться ошибкой или SSH-клиент по-прежнему не сможет его использовать. Проверьте владельца с помощью ls -l; избегайте слепой смены владельца, особенно с помощью sudo, поскольку правильное решение зависит от того, почему файл принадлежит другому пользователю.
Проверка каталога .ssh
В руководстве по SSH рекомендуется, чтобы каталог ~/.ssh/ был доступен для чтения, записи и поиска его владельцу и недоступен для других. Если SSH сообщает о проблеме с правами доступа к самому каталогу, выполните:
chmod 700 "$HOME/.ssh"
Это закроет доступ группе и другим пользователям, предоставив вашей учетной записи полный доступ к каталогу. Если ключ хранится в другой папке, проверьте каждый каталог на пути к нему: учетной записи требуется право на поиск (выполнение), чтобы добраться до файла. Не выполняйте рекурсивный chmod для всего домашнего каталога или папки .ssh в качестве первой меры; это может изменить права доступа к несвязанным файлам с другими требованиями. Справочное руководство OpenBSD ssh(1)
Проверка, что SSH использует нужный ключ
Даже после исправления прав может показаться, что ключ не работает, если SSH ищет его в другом месте или предлагает другую идентификационную информацию. Используйте флаг -i, чтобы указать ключ для конкретного подключения. Замените пример учетной записи и хоста на свои:
ssh -i "$HOME/.ssh/id_ed25519" user@example.com
Параметр -i выбирает файл идентификации, используемый для аутентификации с открытым ключом. Справочное руководство OpenBSD ssh(1) Для получения более подробного журнала подключения добавьте -v:
ssh -v -i "$HOME/.ssh/id_ed25519" user@example.com
Если вы управляете несколькими хостами, вы можете настроить параметр IdentityFile в ~/.ssh/config; блок Host определяет, какие параметры подключения применяются. Клиент также может пробовать ключи, предоставляемые ssh-agent. Директива IdentitiesOnly yes позволяет ограничить предлагаемые идентификационные данные только теми, которые настроены в конфигурационных файлах, когда в агенте загружено много ключей. Справочное руководство OpenBSD ssh_config(5)
Как понять, что ошибка в другом
Локальное предупреждение о правах доступа к приватному ключу отличается от ошибки Permission denied (publickey). Последняя может означать, что сервер не распознает соответствующий открытый ключ, имя пользователя указано неверно или SSH пытается использовать другую учетную запись. Открытый ключ, соответствующий вашему приватному ключу, должен быть авторизован для учетной записи на удаленном хосте; изменение локальных прав доступа не устанавливает этот открытый ключ на сервер. Справочное руководство OpenBSD ssh(1)
Если chmod возвращает «Operation not permitted», проверьте, являетесь ли вы владельцем файла и указывает ли путь на нужный ключ. Не делайте приватный ключ общедоступным для чтения, чтобы заглушить предупреждение: ограничения SSH защищают учетные данные, и их снятие может привести к тому, что клиент отклонит ключ. Как только для приватного ключа и его каталога будут установлены подходящие права, повторите попытку с флагом -v и проанализируйте диагностический вывод, чтобы отличить проблему с локальным файлом от ошибки аутентификации или проблемы на стороне сервера.
Источники
ssh(1) — справочные страницы OpenBSD — OpenBSD
chmod(1) — справочные страницы OpenBSD — OpenBSD