Ошибка ssh-add: нет соединения с агентом для Heroku
Пошаговое решение ошибки 'Could not open a connection to your authentication agent' при ssh-add для SSH-ключей Git и Heroku. Запуск ssh-agent, добавление приватного ключа, настройка heroku keys:add и отладка авторизации.
Как решить ошибку ‘Could not open a connection to your authentication agent’ при добавлении SSH-ключей для Git и развертывания на Heroku?
Я сталкиваюсь со следующей ошибкой при попытке добавить мой SSH-ключ:
$ ssh-add ~/.ssh/id_rsa.pub
Could not open a connection to your authentication agent.
Это мешает мне отправлять код в Heroku, где возникает следующая ошибка:
$ git push heroku master
Warning: Permanently added the RSA host key for IP address '50.19.85.132' to the list of known hosts.
! Your key with fingerprint b7:fd:15:25:02:8e:5f:06:4f:1c:af:f3:f0:c3:c2:65 is not authorized to access bitstarter.
Какие шаги следует предпринять для правильной настройки SSH-аутентификации и решения этих проблем?
Ошибка “Could not open a connection to your authentication agent” обычно означает, что ssh-agent не запущен или переменная окружения SSH_AUTH_SOCK недоступна в текущем сеансе — и при этом вы пытаетесь добавить публичный ключ (.pub) вместо приватного через ssh-add. Исправление: запустите агент (eval "$(ssh-agent -s)"), добавьте приватный ключ (ssh-add ~/.ssh/id_rsa или ssh-add ~/.ssh/id_ed25519), затем загрузите публичный ключ в аккаунт Heroku (heroku keys:add ~/.ssh/id_rsa.pub) и проверьте ssh-add -l и heroku keys. Если Heroku выдаёт “key not authorized”, очистите лишние ключи (ssh-add -D и heroku keys:clear) и укажите конкретный IdentityFile в ~/.ssh/config.
Содержание
- Запуск ssh-agent и добавление ключа (ssh-add)
- Добавление SSH-ключа: приватный vs публичный (.pub)
- Добавление ключа в Heroku и проверка доступа
- Пошаговая отладка: что проверить сначала
- Права доступа и безопасность ключей
- Особенности Windows, WSL и Git Bash
- Несколько ключей и ~/.ssh/config (IdentityFile)
- Источники
- Заключение
Запуск ssh-agent и добавление ключа (ssh-add)
Почему это происходит? Потому что ssh-add общается с фоновым процессом — ssh-agent — через unix-сокет, путь к которому хранится в переменной SSH_AUTH_SOCK. Если агента нет или переменная не установлена, вы увидите ошибку “Could not open a connection to your authentication agent”.
Быстрый набор команд (bash / zsh):
# запустить агент и сохранить переменные в текущем сеансе
eval "$(ssh-agent -s)"
# добавить приватный ключ (ВАЖНО — приватный, не .pub)
ssh-add ~/.ssh/id_rsa # или ~/.ssh/id_ed25519
# проверить, какие ключи загружены
ssh-add -l
# убедиться, что сокет установлен
echo "$SSH_AUTH_SOCK"
Если вы используете csh/tcsh:
eval `ssh-agent -c`
ssh-add ~/.ssh/id_rsa
Несколько практических замечаний:
- Не выполняйте
ssh-addс sudo — тогда переменные агента не будут доступны в окружении root и добавление не сработает. В реальных случаях это выглядит как: вы запустилиsudo ssh-add ...и получили ту же ошибку. См. пример на Stack Overflow: https://stackoverflow.com/questions/17846529/could-not-open-a-connection-to-your-authentication-agent - Если агент запущен в другом терминале/сеансе — экспортируйте
SSH_AUTH_SOCKиз того сеанса или перезапустите агент в текущем. Об этом подробно: https://betterstack.com/community/questions/could-not-open-connection-to-yout-authentication-agent/ - Чтобы временно удалить все ключи и начать с чистого листа:
ssh-add -D.
Добавление SSH-ключа: приватный vs публичный (.pub)
Частая ошибка — попытка запустить ssh-add для публичного ключа:
# НЕ так — это добавляет публичный ключ, чего ssh-agent не ожидает
ssh-add ~/.ssh/id_rsa.pub
# -> Could not open a connection to your authentication agent. (и/или другая ошибка)
ssh-agent хранит приватные ключи — поэтому правильно:
ssh-add ~/.ssh/id_rsa # приватный
# или для ed25519
ssh-add ~/.ssh/id_ed25519
Если ключа нет или хотите создать новый (современный и короткий):
ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/id_ed25519
# либо RSA 4096 бит:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com" -f ~/.ssh/id_rsa
Генерация, добавление приватного ключа в агент и затем загрузка публичного ключа на сервис — правильная последовательность.
Добавление ключа в Heroku и проверка доступа
Heroku ожидает, что у него на аккаунте будет ваш публичный ключ, а при push вы будете аутентифицироваться приватным ключом (через агент или напрямую). Официальная инструкция — в документации Heroku: https://devcenter.heroku.com/articles/keys
Типичный порядок действий:
- Убедитесь, что агент запущен и приватный ключ добавлен (см. раздел выше).
- Загрузите публичный ключ в аккаунт Heroku:
heroku keys:add ~/.ssh/id_rsa.pub
или просто heroku keys:add — CLI предложит варианты.
3. Посмотреть, какие ключи у вас в аккаунте Heroku:
heroku keys
- Если сервер возвращает “Your key with fingerprint … is not authorized to access
”, проверьте:
- Вы вошли в нужный Heroku-аккаунт:
heroku whoami(подстановка правильного аккаунта критична). Документация по аутентификации: https://devcenter.heroku.com/articles/authentication - На клиенте загружен тот приватный ключ, который соответствует публичному ключу в Heroku:
ssh-add -lи сравните отпечаток. - Удалите старые/неправильные серверные ключи:
heroku keys:clear, затем добавьте нужный.
- Диагностика SSH при push:
# показать подробный вывод ssh при push
GIT_SSH_COMMAND="ssh -v" git push heroku master
# или протестировать напрямую
ssh -v git@heroku.com
Если у вас несколько аккаунтов или ключей, полезно настроить ~/.ssh/config (см. раздел про multiple-keys).
Пошаговая отладка: что проверить сначала
Пошаговый чеклист (выполняйте по порядку):
- Шаг 1 — агент:
eval "$(ssh-agent -s)"иssh-add ~/.ssh/id_rsa. - Шаг 2 — убедиться, что добавлен приватный ключ:
ssh-add -l. - Шаг 3 — если много ключей, почистите:
ssh-add -D, затем добавьте только тот, который нужен Heroku. - Шаг 4 — проверить публичный ключ в аккаунте Heroku:
heroku keysи при необходимостиheroku keys:clear+heroku keys:add ~/.ssh/id_rsa.pub. - Шаг 5 — проверить удалённый git-remote:
git remote -v— URL должен бытьgit@heroku.com:your-app.git. При сомнениях выполнитеheroku git:remote -a your-app. - Шаг 6 — запустить verbose-режим для SSH:
GIT_SSH_COMMAND="ssh -v" git push heroku master— в выводе видно, какой ключ используется и почему доступ отклонён. - Шаг 7 — проверьте, не использует ли система другой агент (Pageant / Windows agent). Для WSL/Windows — см. специальные разделы и обсуждение: https://superuser.com/questions/1363150/windows-subsystem-for-linux-ubuntu-ssh-agent-running-but-ssh-add-complains-cou
Ещё одна причина — слишком много ключей: SSH по умолчанию пробует несколько ключей, и сервер может “закрыть” попытки. Об этом аккуратно написано в обсуждениях: https://stackoverflow.com/questions/8786564/cannot-push-to-heroku-because-key-fingerprint
Права доступа и безопасность ключей
Неправильные права на файлы .ssh и ключи тоже ломают аутентификацию. Рекомендация:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa # приватный ключ
chmod 644 ~/.ssh/id_rsa.pub # публичный ключ (можно 644)
chmod 600 ~/.ssh/authorized_keys # если используете authorized_keys на сервере
В некоторых инструкциях предлагают chmod 400 для приватного ключа — это тоже работает, главное — чтобы файл был недоступен для посторонних. См. обсуждение ошибки “Unprotected private key file”: https://stackoverflow.com/questions/25869207/getting-warning-unprotected-private-key-file-error-message-while-attempting/56593424#56593424
Особенности Windows, WSL и Git Bash
Windows и WSL могут вести себя иначе:
- Git Bash и OpenSSH в Windows: убедитесь, что используете тот же ssh-agent, где находятся переменные окружения. Для Git Bash запускайте
eval "$(ssh-agent -s)"внутри Git Bash и затемssh-add. - WSL: если агент был запущен в Windows, переменная
SSH_AUTH_SOCKможет не быть автоматически видна в WSL; для этого есть паттерны перенаправления или нужно запустить агент внутри WSL. Пример решения и обсуждение: https://superuser.com/questions/1363150/windows-subsystem-for-linux-ubuntu-ssh-agent-running-but-ssh-add-complains-cou - Putty/Pageant: если вы используете PuTTY, то ключи в формате .ppk добавляются в Pageant, а не через
ssh-add. В таком случае либо используйте Pageant + PuTTY-плагин, либо конвертируйте ключ в OpenSSH-формат и используйтеssh-add.
И да — иногда антивирус на Windows блокирует или кладёт в карантин ssh-agent.exe (такое случалось в реальности). Если ничего не помогает, проверьте логи антивируса: https://qna.habr.com/q/1142754
Несколько ключей и ~/.ssh/config (IdentityFile)
Если у вас несколько приватных ключей (для GitHub, GitLab, Heroku и т.д.), настройте ~/.ssh/config, чтобы ssh использовал нужный ключ для Heroku и не пытался применять все подряд:
Host heroku.com
HostName heroku.com
User git
IdentityFile ~/.ssh/id_rsa_heroku
IdentitiesOnly yes
Пара моментов:
IdentitiesOnly yesзаставляет SSH использовать только указанныйIdentityFile, что устраняет проблему “слишком много попыток авторизации”.- После изменения
~/.ssh/configможно перепривязать remote, если нужно:
git remote set-url heroku git@heroku.com:your-app.git
# или
heroku git:remote -a your-app
Если вы используете специальный плагин/инструмент для нескольких аккаунтов Heroku (ddollar/heroku-accounts), проверьте настройки .git/config — часто проблема в неверном URL удалённого репозитория: https://github.com/ddollar/heroku-accounts/issues/45
Источники
- Managing SSH Keys — Heroku Dev Center
- Heroku CLI Authentication — Heroku Dev Center
- Could not open a connection to your authentication agent — Stack Overflow
- Could Not Open a Connection to Your Authentication Agent — Better Stack Community
- ssh-agent / ssh-add error — Super User (agent output example)
- WSL: ssh-agent running but ssh-add complains — Super User
- Ошибка при запуске ssh-add в csh/tcsh — Red Hat Customer Portal
- How To Fix ‘Could Not Open A Connection To Your Authentication Agent’ In Git — Squash.io
- Cannot push to Heroku because key fingerprint — Stack Overflow
- Unprotected private key file — Stack Overflow
- ssh-add complains: Could not open a connection to your authentication agent — Unix & Linux Stack Exchange
Заключение
Коротко: запустите ssh-agent, добавьте приватный ключ через ssh-add (не .pub), загрузите публичный ключ в Heroku через heroku keys:add и проверьте, какой ключ реально используется (ssh-add -l, GIT_SSH_COMMAND="ssh -v" git push heroku master). Если ошибка “key not authorized” остаётся — очистите лишние ключи (локально и в аккаунте Heroku), убедитесь, что вы в том же Heroku-аккаунте (heroku whoami), и при необходимости зафиксируйте нужный ключ через ~/.ssh/config. Следуя этим шагам, вы устраните ошибку “Could not open a connection to your authentication agent” и восстановите возможность пуша на Heroku.