Сообщение об ошибке
WARNING: UNPROTECTED PRIVATE KEY FILE!
Также выводится как
- Permissions 0644 for '/path/to/key' are too open.
- It is required that your private key files are NOT accessible by others.
- This private key will be ignored.
Выводится блоком между строками из `@`, за ним следует «Permissions 0644 for '…' are too open.» — режим и путь берутся из вашего файла. `ssh-add` выводит тот же блок и отказывается добавлять ключ.
OpenSSH client (ssh, ssh-add, scp, git over SSH) — key file permission check
Что это означает
OpenSSH отказывается использовать файл закрытого ключа, который могут прочитать другие пользователи машины. Ключ игнорируется («This private key will be ignored.»), поэтому подключение обычно продолжается, а затем завершается ошибкой «Permission denied (publickey)». Восьмеричный режим в сообщении показывает, что разрешено для файла; ошибку вызывает всё, что шире чтения и записи для владельца (`0600` или `0400`), а в Windows аналогичная проверка смотрит на ACL файла.
Почему это происходит
Файл ключа создан с правами по умолчанию
частоКлючи, записанные в CI через `echo "$SSH_KEY" > key`, извлечённые из архивов, склонированные из репозиториев или скачанные из менеджера секретов, получают права по умолчанию из umask (обычно 0644).
Унаследованные ACL в Windows
частоOpenSSH для Windows проверяет, что у других пользователей и групп (например, `Users` или `Authenticated Users`) нет доступа к файлу. Файлы в профиле пользователя часто наследуют более широкие права.
Bind-монтирование и сетевые общие ресурсы
иногдаФайлы, смонтированные с хоста в контейнер или из общих ресурсов SMB/NTFS в WSL, могут показывать режимы 0777/0755, которые нельзя изменить на месте.
Как исправить
- 1.
Оставьте доступ к файлу только владельцу
`chmod 600` (или 400) для ключа и 700 для `~/.ssh`. В CI задавайте права на том же шаге, на котором записываете ключ.
bash chmod 600 ~/.ssh/id_ed25519 # owner read/write only (400 works too) chmod 700 ~/.ssh ls -l ~/.ssh/id_ed25519 # -rw------- 1 you you ... - 2.
Исправьте ACL в Windows
Отключите наследование и дайте доступ на чтение только своей учётной записи.
text REM Windows OpenSSH: remove inherited permissions, grant only your user icacls %USERPROFILE%\.ssh\id_ed25519 /inheritance:r icacls %USERPROFILE%\.ssh\id_ed25519 /grant:r "%USERNAME%":R - 3.
Монтируйте ключи с явно заданными правами
Секреты с `mode: 0400` (или копирование ключа в контейнер с последующим `chmod`) дают OpenSSH права, которых он требует.
yaml # docker compose: mount the key as a secret with explicit mode instead of a bind mount services: deployer: secrets: - source: deploy_key target: /root/.ssh/id_ed25519 mode: 0400