Не удается нажать на Heroku, потому что отпечаток ключа

131

Я новичок в Rails, и я пытался развернуть очень простое приложение на Heroku. Это второе приложение, которое я развертываю, и первое, с которым я справился отлично. Однако у меня возникли проблемы с этим. Каждый раз, когда я « git push heroku master », я получаю такую ​​ошибку:

! Ваш ключ с отпечатком пальца xx: xx: xx: xx: xx: xx: xx: xx: xx: xx: xx: xx: xx: xx: xx: xx не авторизован для> доступа к my_heroku_app.

фатальный: удаленный конец неожиданно завис

Я попытался управлять своими ключами после входа в heroku. Если я наберу в консоли « ключи героку », то получу:

Нет ключей для myemailaddress.

Однако, если я запустил команду « heroku keys: add », я получу

Обнаружен существующий открытый ключ: /Users/michele/.ssh/id_rsa.pub Загрузка открытого ключа ssh /Users/michele/.ssh/id_rsa.pub! Отпечаток пальца уже существует. Пожалуйста, используйте один ключ ssh для каждой учетной записи Heroku

Пожалуйста, помогите мне! Это так неприятно, я понятия не имею, что не так! Спасибо

MRE
источник

Ответы:

288

У меня была такая же проблема, я безуспешно следил за этим и другими подобными сообщениями: - ((

Наконец, я нашел решение: мне пришлось добавить свою новую личность rsa на мою машину!

Итак, первым делом я создал новый ключ rsa:

ssh-keygen -t rsa -C "giordano.scalzo[at]gmail.com" -f  ~/.ssh/id_rsa_heroku

затем добавил его на мою машину

ssh-add ~/.ssh/id_rsa_heroku

и, наконец, в Heroku

heroku keys:add ~/.ssh/id_rsa_heroku.pub

После этого,

git push heroku master

работал как шарм!

Надеюсь это поможет.

Джордано Скальцо
источник
47
Это было очень близко для меня. Но было еще одно. У меня было два аккаунта на героку. Первый добавил мой SSH-ключ по умолчанию для моей машины. Что бы я ни делал, пытаясь исправить свою вторую учетную запись, этого не произойдет, пока я не удалю свой ключ по умолчанию из первой учетной записи. SSH-AGENT отправит первый ключ по умолчанию, вызывая эту проблему. Исправление состоит в том, чтобы создать определенные ключи для heroku (не по умолчанию) для каждой учетной записи
Tom Carchrae 06
13
У меня была та же проблема, что и у @TomCarchrae. Я вышел из учетной записи, которая казалась постоянно заблокированной heroku logout, вошел в другую учетную запись и удалил ключ RSA по умолчанию из этой учетной записи. После этого я смог нажать только что сгенерированный ключ.
Росс Аллен
14
Лично для меня я сделал то же самое, ssh-add ~/.ssh/id_rsa_herokuчто и у меня, ssh-add ~/.ssh/identity.heroku.fooпотому что я также использую https://github.com/ddollar/heroku-accounts (менеджер нескольких учетных записей для Heroku).
user664833
1
Еще одна вещь, о которой следует помнить - если у вас слишком много ключей SSH, он не сможет войти в систему, потому что он пробует ключи по порядку (а затем вас выгоняют из входа в систему из-за слишком большого количества сбоев). похоже, это недостаток ssh-agent (в любом случае в ubuntu, но я предполагаю и другие реализации). Итак, если вы рвете за волосы, попробуйте переместить каталог ~ / .ssh и создать новый (затем вы можете вставлять ключи один за другим).
Tom Carchrae
7
Вы можете повлиять на то, какой ключ будет отправлен, добавив запись хоста в ~ / .ssh / config для heroku.com, указывающую на нужный вам ключ. Для меня это было быстрым решением, поскольку он продолжал пытаться использовать мой ключ по умолчанию и терпел неудачу. Однако это, вероятно, не поможет в случае нескольких учетных записей.
dnewcome
61

У меня тоже есть несколько ключей и несколько учетных записей heroku, поэтому я сталкиваюсь с этой проблемой каждые несколько месяцев. Как упоминали Джордано Скальцо, Том Карчрэ и user664833, основная проблема - это ssh-agent, которым вы управляете с помощью ssh-addкоманды. Страница руководства ( man ssh-add) на самом деле довольно ясна и лаконична, так что проверьте ее.

Вы можете перечислить все ключи, о которых знает ssh-agent:

ssh-add -l

Вы можете удалить все ключи, о которых знает ssh-agent:

ssh-add -D

Или удалите определенный ключ с помощью

ssh-add -d ~/.ssh/id_rsa_example_key_file_use_your_own

Не волнуйся! Фактически вы не удаляете ключи, а только меняете те, которые ssh-agent пытается использовать автоматически, например, когда вы пытаетесь нажать на heroku. При необходимости легко добавлять и удалять ключи, поэтому для меня, когда я расстраиваюсь из-за этой проблемы, самый простой способ исправить это - удалить все ключи и добавить обратно только тот, который я хочу использовать в данный момент.

ssh-add -D
ssh-add ~/.ssh/id_rsa_example_use_this_one_i_mean_it
towynlin
источник
1
это сработало для меня, однако при попытке вернуть мой ключ ssh по умолчанию постоянно запрашивался пароль (на Mtn Lion), не думаю, что он у меня есть? Перезагрузился и вернулся к моему ssh по умолчанию, все в порядке - также нашел этот stackoverflow.com/questions/7927750/… который отлично работает
house9
Я долго бился головой о стену над этой, и это был последний шаг, который требовался - спасибо!
griswoldbar
Если вы попробовали первый метод, а затем этот (и получаете ошибку Permission Denied (publickey) при попытке нажать на свой пульт Heroku), вы, вероятно, забыли повторно запустить команду heroku keys: add. В любом случае, большое вам спасибо! Это сделало это для меня.
Hairgami_Master
38

На вашем компьютере есть SSH-ключ, но этот SSH-ключ связан с другой учетной записью Heroku.

Если вам нужно использовать обе учетные записи для разных приложений на одном компьютере, вам следует создать новый ключ SSH на своем компьютере и загрузить его в Heroku:

$ ssh-keygen

Обязательно сохраните его как '/Users/User/.ssh/new_id_rsa.pub', когда вас спросят.

$ heroku keys:add /Users/User/.ssh/new_id_rsa.pub 

Затем вам нужно добавить альтернативный хост для heroku.comвашего ~/.ssh/config:

Host heroku-alt
HostName heroku.com
IdentityFile ~/.ssh/new_id_rsa

А затем обновите .git/configв своем проекте, чтобы использовать псевдоним хоста:

[remote "heroku"]
  url = git@heroku-alt:myapp.git
  fetch = +refs/heads/*:refs/remotes/heroku/*

Выбирая между herokuи heroku-altв удаленном из .git/configфайлов конкретных проектов, вы можете управлять тем, какие проекты используют какие учетные данные.

Даниэль Х Мур
источник
1
Да, это тоже было проблемой для меня. Доступ к двум учетным записям Heroku с одного клиента. Спасибо.
Бернард
Я пытаюсь сделать этот метод, но «Host Heroku-альт» дает мне ошибку: Host heroku-alt not found: 3(NXDOMAIN). Я кладу это в терминал Mountain Lion. ~/.ssh/configтоже не существует, просто куча .pubфайлов и один с именем known_hosts. А идеи?
JVG
@Jascination Вам нужно будет создать ~ / .ssh / config и вставить содержимое, указанное в ответе. Когда вы закончите сохранить файл , и он будет содержать Host, HostNameи на IdentityFileлинии. Тогда должно работать нормально.
Дэниел Икс Мур
3
Превосходно! Такая изящная техника!
kinopyo
Мужчина! Ты восхитителен. Выполнение пошаговых инструкций наконец принесло мне облегчение. Спасибо !!
softvar
14

Вот очень четкое объяснение, которого не хватает в документации Heroku или других ответах на вопрос. По крайней мере, кажется, что вся информация не появляется ни в одном месте. Это также позволяет вам понять проблему так, как это не делает инструмент учетных записей.

Heroku идентифицирует вас двумя способами:

Первый находится в .git / config

[heroku]
    account = acccount_name

Кажется, это позволяет вам выполнять основные операции, используя heroku

Второй способ, которым heroku идентифицирует вас, - это любая операция, использующая ssh (git push). Heroku идентифицирует вас по вашему ssh-ключу, как указано здесь: https://devcenter.heroku.com/articles/keys

Эта пара ключей используется для надежной криптографии и однозначно идентифицирует вас как разработчика при внесении изменений в код.

Таким образом, каждая учетная запись heroku, над которой вы работаете, при использовании ssh должна будет отправить свой ключ на heroku. Следуйте любому руководству по созданию ключей ssh.

Ключ в том, чтобы заставить SSH использовать разные ключи для каждой учетной записи Heroku. Как это настроить? Вам нужно будет сделать 2 вещи:

1) Вам нужно будет создать «фиктивный» домен, который ваш .ssh / config будет перехватывать и перенастраивать. Это сообщит ssh «фактический» домен, который вы хотите, и какой специальный ключ ssh использовать.

Host heroku.my_unique_key
  HostName heroku.com
  IdentityFile ~/.ssh/identity.heroku.my_unique_key
  IdentitiesOnly yes

2) Измените свой .git / config, чтобы использовать его при использовании git push. Вместо heroku.com используйте фиктивный домен, который вы установили в своем .ssh / config.

[remote "heroku"]
    url = git@heroku.com.git


[remote "heroku"]
    url = git@heroku.my_unique_key:myapp.git

Вот и все :) Немного сложно и в то же время немного просто. У меня ушло 3 года на то, чтобы биться головой об стену методом проб и ошибок, чтобы обнаружить эту информацию. Это должно быть где-то четко задокументировано, но, по крайней мере, это начало.

pixelearth
источник
Моей проблемой было уникальное имя хоста. Большое спасибо pixelearth.
FluffyJack
Muchos Gracias Por Favor
EE33
9

youn нужно будет создать новые ключи и добавить их

укажите новое имя файла после запуска

ssh-keygen

тогда (в моем случае)

heroku keys:add /home/alex/.ssh/alex_heroku_rsa.pub
akmur
источник
3

У меня такая же проблема на прошлой неделе. Эта ссылка выручила меня. Надеюсь, это вам немного поможет. http://devcenter.heroku.com/articles/keys

Вениамин
источник
Я видел эту ссылку, пытался удалить и снова добавить свои ключи, но все еще не могу заставить ее работать.
mre
Вы разобрались с этой проблемой?
Benjamin
1
Вы можете кратко изложить инструкции по этой ссылке? Мы стараемся избегать здесь ответов только по ссылкам.
восковой орел
Это только объясняет, как создавать ключи, а не как управлять несколькими ключами.
Macario
3

В моем случае heroku keysуже был указан правильный ключ. Итак, все, что мне нужно было сделать, это запустить, ssh-add /path/to/that/keyи все начало работать нормально.

М. Скотт Форд
источник
2

У меня также есть две учетные записи Heorku, и в качестве обходного пути я «пригласил» свою основную учетную запись (ту, ключ которой автоматически используется Heroku) в качестве соавтора моего проекта.

Fabio CR
источник
1

Просто не хочу добавлять решение для пользователей Windows.

  1. Сначала скачайте "Генератор ключей Putty"

  2. Создайте ключ с помощью этого OBS, вам нужно переместить мышь в пустую область, чтобы создать случайность.

  3. Сохраните ключи, просто не забудьте переименовать ключ в [имя] .pub

  4. Запускаем heroku keys:addв терминале!

Rails новичок
источник
0

В моем случае проблема заключалась в используемой мной версии ssh. Я просто установил для переменной среды GIT_SSH другое значение ("GIT_SSH = / usr / bin / ssh"), и у меня все заработало.

gfhuertac
источник