Что означает ошибка SSH Permission denied
При попытке подключиться к удалённому серверу по SSH на macOS вы видите сообщение:
Permission denied (publickey,password).
Эта ошибка означает, что сервер отклонил вашу попытку аутентификации. SSH пытался использовать несколько методов (сначала публичный ключ, затем пароль), но ни один не succeeded. В результате доступ запрещён.
Ошибка SSH Permission denied не является специфичной для macOS — она возникает на любой платформе. Однако на macOS есть свои нюансы: расположение файлов ключей, работа с Keychain, настройки агента. Данная статья сосредоточена именно на решении проблемы в среде macOS.
Причины возникновения
Ошибка Permission denied обычно вызвана одной из следующих причин:
- Неправильные права доступа к файлам SSH-ключей на вашем Mac. Приватный ключ (например,
~/.ssh/id_rsa) должен быть доступен только для чтения владельцем (права600). Если права более открытые (например,644), SSH откажется использовать ключ из соображений безопасности. - Отсутствие публичного ключа на сервере. Ваш публичный ключ (
id_rsa.pub) не был добавлен в файл~/.ssh/authorized_keysна удалённом сервере, или добавлен некорректно (например, с переносами строк). - SSH-агент не запущен или не содержит загруженных ключей. На macOS агент (
ssh-agent) обычно запускается автоматически, но иногда ключи не загружаются в сеанс, особенно после перезагрузки. - Неверный путь к приватному ключу при подключении. Если ключ лежит в нестандартном месте или имеет другое имя, нужно явно указать его опцией
-i. - На сервере отключена аутентификация по ключам. В конфигурации SSH-сервера (
/etc/ssh/sshd_config) может быть установленоPubkeyAuthentication noилиPasswordAuthentication no(и парольная аутентификация отключена). - Ошибка в имени пользователя. Вы пытаетесь войти под пользователем, у которого нет доступа или неправильно указано имя.
- Двухфакторная аутентификация или другие ограничения (например,
AllowUsersв конфиге сервера).
Способы решения
Способ 1: Проверка прав доступа к ключам SSH
На macOS права на файлы SSH-ключей должны быть строго ограничены. Откройте Terminal и выполните:
# Проверьте права на папку .ssh
ls -ld ~/.ssh
# Ожидаемый вывод: drwx------ или drwxr-xr-x (но лучше 700)
# Проверьте права на приватный ключ (например, id_rsa)
ls -l ~/.ssh/id_rsa
# Ожидаемый вывод: -rw------- (600)
# Если права другие, исправьте:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
# Если у вас несколько ключей, исправьте каждый приватный ключ.
⚠️ Важно: Не устанавливайте права
777или644на приватные ключи — SSH откажется их использовать.
После исправления прав попробуйте подключиться снова.
Способ 2: Добавление публичного ключа на сервер
Убедитесь, что ваш публичный ключ присутствует в authorized_keys на сервере.
- На вашем Mac скопируйте содержимое публичного ключа:
cat ~/.ssh/id_rsa.pub
Скопируйте весь вывод (начинается с ssh-rsa ...).
- На сервере (если у вас уже есть доступ, например, по паролю) откройте или создайте файл:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys
Вставьте скопированную строку в конец файла. Сохраните (Ctrl+X, затем Y, Enter).
- Установите правильные права:
chmod 600 ~/.ssh/authorized_keys
- Попробуйте подключиться снова.
💡 Совет: Если вы не имеете доступа к серверу, попросите администратора добавить ваш публичный ключ.
Способ 3: Запуск и настройка SSH-агента
macOS использует ssh-agent для хранения ключей в памяти. Проверьте, запущен ли агент и загружены ли ключи:
# Проверить, работает ли агент
echo $SSH_AUTH_SOCK
# Если вывод пустой, агент не запущен в текущей сессии.
# Запустить агент вручную
eval "$(ssh-agent -s)"
# Вывод должен быть: Agent pid 12345
# Добавить ключ (если он не загружен)
ssh-add ~/.ssh/id_rsa
# Если ключ защищён паролем, введите его.
# Проверить список загруженных ключей
ssh-add -l
# Должен показать отпечаток вашего ключа.
Если вы используете SSH-ключ с паролем, чтобы не вводить его каждый раз, добавьте ключ в macOS Keychain:
ssh-add -K ~/.ssh/id_rsa
Флаг -K (заглавная K) сохраняет пароль в Keychain, и ключ будет автоматически загружаться при входе в систему.
После загрузки ключа попробуйте подключиться.
Способ 4: Явное указание ключа при подключении
Если ваш ключ имеет нестандартное имя или расположен в другом месте, укажите его явно:
ssh -i ~/.ssh/ваш_ключ user@host
Например:
ssh -i ~/.ssh/id_ed25519 user@example.com
Также можно добавить настройку в локальный конфиг SSH (~/.ssh/config), чтобы не указывать ключ каждый раз:
Host myserver
HostName example.com
User username
IdentityFile ~/.ssh/id_ed25519
После этого достаточно выполнить ssh myserver.
Способ 5: Проверка конфигурации SSH-сервера
Если у вас есть доступ к серверу (например, через консоль или другой аккаунт), проверьте его настройки:
- Откройте файл конфигурации:
sudo nano /etc/ssh/sshd_config
- Убедитесь, что установлены следующие параметры:
PubkeyAuthentication yes
PasswordAuthentication yes # если хотите разрешить пароль (не рекомендуется)
AuthorizedKeysFile .ssh/authorized_keys
- Также проверьте, нет ли ограничений для вашего пользователя (директива
AllowUsersилиDenyUsers). - После изменений перезапустите SSH-демон:
sudo systemsetup -setremotelogin on # для macOS Server
# или
sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
На стандартном macOS (не Server) управление SSH осуществляется через systemsetup или launchctl.
Способ 6: Временное отключение аутентификации по ключу для диагностики
Чтобы понять, в чём именно проблема (ключ или пароль), попробуйте подключиться, отключив использование ключа:
ssh -o PubkeyAuthentication=no user@host
Если подключение по паролю успешно, значит, проблема в ключах (права, отсутствие на сервере, агент). Если и это даёт Permission denied, возможно, на сервере отключена парольная аутентификация (PasswordAuthentication no) или ваш пароль неверен.
Также можно включить подробное логирование SSH, чтобы увидеть, что именно происходит:
ssh -vvv user@host
В выводе ищите строки Offering public key и Authentication failed. Это поможет pinpoint проблему.
Профилактика
Чтобы избежать ошибки SSH Permission denied в будущем:
- Всегда соблюдайте права доступа к файлам
~/.sshи ключам. После генерации ключа (ssh-keygen) система обычно устанавливает правильные права, но при копировании файлов они могут сбиться. - Добавляйте публичные ключи на сервер сразу после генерации. Используйте
ssh-copy-id user@host(если установлен) или копируйте вручную. - Используйте SSH-агент и Keychain для автоматической загрузки ключей. На macOS это работает из коробки, но после обновления системы или смены аккаунта может потребоваться перезагрузка агента.
- Храните приватные ключи в защищённом месте и никогда не передавайте их третьим лицам.
- Регулярно проверяйте конфигурацию сервера после обновлений, особенно если вы администратор.
- Используйте конфиг-файл
~/.ssh/configдля управления несколькими серверами и ключами. Это уменьшает вероятность ошибки при указании неверного ключа. - Если используете пароль на ключе, убедитесь, что он достаточно стойкий, и рассмотрите использование аппаратных токенов (например, YubiKey) для двухфакторной аутентификации.
Следование этим рекомендациям минимизирует риск возникновения ошибки доступа при работе с SSH на macOS.