Вчера на одном из компьютеров у меня не получилось сделать это для msysgit ни одним из описанных в интернете способов, и я потратил несколько часов на попытки настроить SSH-доступ, так ни чего и не добившись.
Как я решил эту проблему — под катом.
BitBucket всё время ругался на то, что ему требуется подключение с помощью ключа:
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights and the repository exists.
Мои попытки сгенерировать ключи, указать пути в переменных среды, привязать ключи к гиту были бесполезны. Либо гит ругался крякозябрами (в случае ssh-agent cmd.exe), либо просто игнорировал всё предложенное.
Решение оказалось куда удобнее и проще. Достаточно запустить в локальном репозитории GIT GUI Here, и в меню перейти в
Help -> Show SSH Key:
Если вы столкнулись с такой проблемой, то скорее всего у вас там ни чего не будет:
Ну а дальше читать будут, скорее всего, только самые педантичные… Жмём Generate key, видим окно запроса пароля (два раза) для приватного ключа:
И видим сгенерировавшийся публичный ключ:
Копируем его, и добавляем вэб-морду ГИТа (в моём случае это BitBucket; ключи там можно добавить в двух местах — в настройках аккаунта и в настройках проекта, нам первый вариант, ибо второй — для деплоя проекта) [Аккаунт] — Управление аккаунтом — SSH-ключи — Добавить ключ:
Ну, а дальше — просто делаем что нужно — или пуш, или клон (предполагается, что git remote add вы уже сделали сами). Git спросит, можно ли добавить хост к доверенным, и запросит passphrase (пароль приватного ключа). Всё, можно работать.
Удачных разработок!
PS: Большое спасибо за наводку на решение моему коллеге Ивану!
Комментарии (38)
wrewolf
11.09.2015 13:21+7хабра уже не та
Duster
11.09.2015 13:23-4А что конкретно вас не устраивает? У меня возникла проблема, я её немного неоднозначно решил и написал об этом. Я сделал что-то плохое? Намекните хотя бы, я могу чего-то не понимать. PS: Да и звезды появляются, значит я всё-таки что-то хоть немного полезное написал.
wrewolf
11.09.2015 13:44+4это не решение проблемы, это уход от нее. Проблема что не работают стандартные ломовые утилиты, если ssh-keygen еще банально можен не работать из за того что PATH десять раз переписан. То не работа puttygen говорит о серьезных нарушениях в ОС,
Duster
11.09.2015 13:45Вы предлагаете мне переустановку захламлённой системы? Или тратить часы на чистку?
PuttyGen работает отлично, сам git не подцепляет сторонние ключи.
Почему он не подцепляет ключ, сгенерированный ssh-keygen я не знаю.wrewolf
11.09.2015 13:51+1это вы его не так готовите, PuttyGen нужно сделать экспорт закрытого(приватного) ключа, и его скопировать и вставить в окошко в вашем клиенте, а на сервер загрузить открытый ключ, который на самой форме PuttyGen виден
m00t
11.09.2015 14:57+6Почему он не подцепляет ключ, сгенерированный ssh-keygen я не знаю.
Не самая лучшая фраза, которую может сказать software developer. Лучше бы разобраться с проблемой, а не плодить костыли.
ilnuribat
11.09.2015 13:30Насколько я знаю, ssh-keygen.exe поставляется вместе с клиентом git. По умолчанию ключ сохраняется в файле C:\users\user\.ssh\id_rsa.pub, почти как в линуксах (/home/user/.ssh/id_rsa.pub)
Можно было вообще не париться и просто использовать https
git clone bitbucket.org/username/projectName.git
-->enter login: username
-->enter password: ****Duster
11.09.2015 13:37-3Я уже всё это знаю. Но мой опыт работы с git весьма мал, и подробности настройки я начинаю узнавать только сейчас. По крайней мере, теперь есть статья с еще одним, более простым, способом создания ключей.
wrewolf
11.09.2015 13:45как бонус к https получите сохранение пароля, если агент хранения его не умер у вас
Duster
11.09.2015 13:48-1У меня Intellij IDEA, она и для SSH пароль сохранила. В целом всё работает, но, судя по всему, предыдущие эксперименты оставили следы. Быть может, он ключ ищет где-то не там. В любом случае, эта же проблемма может произойти и у других новичков, а явного её решения не было. Плюсом служит и то, что такое создание ключа банально быстрее…
wrewolf
11.09.2015 13:54А теперь ситуация, надо использовать 2 разных ключа.
Или использовать ранее созданный.Duster
11.09.2015 13:58-1Зачем два разных? Откуда второй? Вы, мне кажется, что-то не так поняли из моих слов, отсюда столько недопониманий…
wrewolf
11.09.2015 14:08Я понял вашу ситуацию, я про то как решать, если понадобиться использовать 2 ключа разных?
Borz
11.09.2015 14:31разнесите их по разным хостам в ~/.ssh/config и цепляйтесь из IDEA не к github.com, а к этим хостам через ssh вместо https.
easyman
11.09.2015 18:47Читайте про темплейты в git
Начинать с git init (неожиданно, да?)Borz
11.09.2015 19:45и? шаблоны описывают только на то, как будет выглядеть .git проекта при создании. Как это относится к тому, чтобы для проекта указать какой SSH-ключ использовать?
easyman
11.09.2015 20:27+1Подвела меня память, вы правы.
Там можно другое имя пользователя и e-mail указать, с этим и перепутал.
А альтернативные ключи делаются немного иначе
Borz
11.09.2015 14:05+4вы бы скрины ошибок дали бы, а то фигня получилась какая-то: «у меня по какой-то причине стандартные утилиты не пашут, за пару часов не разобрался в причинах и поэтому решил использовать костыль, о чём я вам сейчас и поведаю».
а так:
0) вы давали стандартные имена ключам?
1) если нестандартные, то прописывали ли вы их в ~/.ssh/config?
2) пытались ли вы просто зайти по SSH с этими ключами на GitHub? (команда «ssh git@github.com» из Git Bash)
Borz
11.09.2015 14:57+2кстати, ваш пост можно сократить до:
0) запустить Git Bash
1) выполнить в косноли команду «ssh-keygen»
2) выполнить в консоли команду «cat ~/.ssh/id_rsa.pub»
Ибо «Окно генерации SSH Key» по сути своей является просто графическим интерфейсом для консольного ssh-keygen
и ключи надо искать в "~/.ssh", где "~" это виндовый путь %UserProfile%.
HeadOnFire
11.09.2015 15:48+21. В С:/Users/Username создать текстовый файл .bashrc (хинт — в винде для создания dot-файлов нужно написать .bashrc. — с точкой в конце, и нажать enter)
2. В сам файл вписать 2 строчки:
eval $(ssh-agent -s)
ssh-add /C/Users/Username/.ssh/id_rsa
3. Профит.
Естественно, сам id_rsa должен быть сгенерирован и публичный ключ добавлен на GitHub / BitBucket / WhateverBorz
11.09.2015 16:23а память при этом не будет «утекать»? ведь .bashrc будет выполняться по сути при каждом запуске ssh-команд. Или по завершении процесс ssh-agent прибивается тоже?
Я к тому, если я запущу 3 процесса Git Bash, то сколько в итоге я получу в памяти ssh-agent-ов? А после того, как один Git Bash закрою, сколько в памяти останется ssh-agent-ов?HeadOnFire
11.09.2015 16:34Протестил. 2 окна Git Bash, 2 агента. Из личной практики — по 3 терминала открытых бывает регулярно (sass --watch, browsersync, git), но по 3 гитбаша — нет. Зачем? С другой стороны, процессы по 1Мб — не то, из-за чего стоит переживать.
Borz
11.09.2015 16:43Не все весь день держат открытым терминал. А более двух запускается, когда у тебя более двух git-проектов — проще запустить для каждого свой терминал, чем cd-прыгать между ними
последовательность:
0) запустил терминал
1) закрыл терминал
2) запустил терминал
3) закрыл терминал
создаст два «брошенных» процесса ssh-agent в памяти.
PS: создавать лучше не .bashrc, а .profile под линухами и cmd-файл в автозагрузке под виндамиHeadOnFire
11.09.2015 16:49создаст два «брошенных» процесса ssh-agent в памяти.
Хм… Проверил, действительно. В принципе, у меня эта последовательность открыл-закрыл за рабочий день выполняется от десятка раз (не люблю когда терминал все время открыт), но никаких последствий в виде тормозов не замечал. Справедливости ради, у меня десктоп с 16Гб памяти, Core i7 и SSD, на ноутбуках попроще это может действительно быть проблемой.
Спасибо за наводку, поколупаю сегодня .profile
grieverrr
11.09.2015 20:24+2статья легко заменятся одной картинкой с подписью «git gui умеет генерировать ssh ключи». вы большой молодец.
saboteur_kiev
Это конечно хорошо, но можно уточнить что вы сделали с системой, что в ней не работает ни ssh-keygen ни putty-gen?
Duster
Система живет уже года два. Боюсь, что я не смогу перечислить всего. Там были и несколько реализаций SVN, и пробы Mercurial, и (могу врать) что-то для Git (по крайней мере, когда я пользовался Eclipse, то гит я пробовал)…
wrewolf
при том что встроенный ssh-keygen работает, т.е. msysgit запускает его