У меня есть приложение Rails, использующее докер, которое выполняет некоторые автоматические изменения в другом приложении, а затем git отправляет изменения в GitHub. Мне потребовалось немного времени, чтобы получить свои ssh-ключи в контейнере докеров, в каком-то таком же поместье (не доволен им полностью, но изменю его после того, как разберусь с этим). Моя проблема сейчас в том, что при запуске клонов git в Dockerfile все в порядке, но затем из моего кода rails он не сообщает, что у меня нет доступа, поэтому в коде я перехожу к повторному ssh-добавлению ключей . Однако затем он говорит, что Could not open a connection to your authentication agent., поэтому я пытаюсь повторно инициализировать ssh-agent (echo $(ssh-agent -s)), что, похоже, успешно, но все еще не работает на ssh-add.
Если я подключусь по SSH и попробую выполнить эти шаги, он будет работать нормально, но если я подключу консоль и запущу функции, которые запускают эти консольные вызовы, произойдет сбой с той же проблемой. Тогда кажется, что вызов ssh-agent для установки переменных env не установлен. У меня такое ощущение, что контейнеры heroku не позволяют изменять переменные env без прохождения через их heroku config:set, но это невозможно, поскольку каждый процесс будет иметь разные SSH_AUTH_SOCK и SSH_AGENT_PID. Любые предложения о том, как с этим справиться, будут огромным подспорьем.





Эта ошибка обычно возникает, когда у вас не запущен активный агент SSH.
Could not open a connection to your authentication agent.
Это довольно часто встречается в системах на основе Debian, тогда как в большинстве Ubuntu она работает постоянно.
Чтобы это исправить, вам просто нужно запустить нового агента.
eval $(ssh-agent)
Это должно быть выполнено до ssh-add.
Я уже сделал это, но кажется, что настройки переменных среды, которые выполняет eval $ (ssh-agent), не остаются, когда я проверяю их снова, они остаются пустыми.
Какой базовый образ вы используете и поставляется ли он с предустановленным OpenSSH?
Я обеспечиваю его установку, и он запускается, он возвращает PID агента и все остальное, просто вары ENV не остаются. Я думаю, это может быть в основном проблема героку?
Это похоже на то, как Ruby обрабатывает SSH. Похоже, Ruby использует встроенную библиотеку SSH вместо агента SSH по умолчанию в системе. К сожалению, я не являюсь экспертом в Heroku, чтобы дать точный ответ, но пробовали ли вы heroku run bash вместо heroku run console, чтобы узнать, подхватывает ли он агента?
В вашей текущей настройке вам необходимо оценить риск / стоимость использования закрытого SSH-ключа, защищенного кодовая фраза.
Как и упомянутый здесь, для автоматизированного процесса рекомендуется использовать ключ без парольной фразы, если вы уверены, что нет простого способа получить доступ к указанному закрытому ключу.
@ndilucca Тогда он не должен вас ни о чем просить, если только вы не зарегистрировали должным образом открытый ключ на удаленной стороне или ... вы использовали неправильный формат закрытого ключа: см. stackoverflow.com/a/53645530/6309
Он отлично работает, если я подключаюсь к серверу по ssh и запускаю команды вручную, что означает, что мои ключи в порядке и работают. Проблема возникает только тогда, когда я запускаю код из ruby, мой код запускает все команды bash через ruby. Если я запускаю рубиновую консоль на сервере heroku, даже просто устанавливая env var, она не сохраняется.
@ndilucca Хорошо, но зачем тогда упоминать ssh-agent? Разве это не нужно только для ключей, защищенных парольной фразой?
Сообщите мне, если это не сработает. SSH в контейнере Docker иногда может быть настоящей проблемой.