как мне сообщить git для windows, где найти мой закрытый ключ rsa?

<p>моя установка git отлично работает в linux, но когда я пытаюсь настроить ее под windows (используя git для windows и <a href="http://en.wikipedia.org/wiki/tortoisegit">tortoisegit</a> ), я не знаю, куда поместить свой закрытый ключ ssh (или, что лучше, тем не менее, как сказать <code>ssh</code>, где он находится). я использую стандартную опцию ssh.exe во время установки git для windows. настройка работает нормально, если я разрешаю аутентификацию по паролю (вместо rsa) на сервере.</p>

<h1>для git bash</h1><p>если вы используете msysgit (я полагаю, вы это делаете) и хотите запустить git bash (я рекомендую использовать tortoisegit, но сейчас я больше склоняюсь к cli, чем к gui), вам нужно выяснить, какой домашний каталог для git bash, запустив его, затем введите <code>pwd</code> (в windows 7 это будет что-то вроде <code>c:\users\phsr</code>, я думаю). пока вы в git bash, вы должны <code>mkdir .ssh</code>.</p><p>после того, как у вас есть домашний каталог и папка <code>.ssh</code> в нем, вы хотите открыть puttygen и открыть ключ (файл .ppk), который вы ранее создали. как только ваш ключ открыт, вы хотите выбрать <code>conversions -> export openssh key</code> и сохранить его в <code>home\.ssh\id\_rsa</code>. после того, как у вас есть ключ в этом месте, git bash распознает ключ и использует его.</p><p>примечание. комментарии показывают, что это работает не во всех случаях. вам может потребоваться скопировать ключ openssh в <code>program files\git\.ssh\id\_rsa</code> (или <code>program files (x86)\git\.ssh\id\_rsa</code>).</p><h1>для tortoisegit</h1><p>при использовании tortoisegit, вам нужно установить ключ ssh с помощью <a href="https://serverfault.com/questions/194567/how-to-i-tell-git-for-windows-where-to-find-my-private-rsa-key/198614#198614">направления в ногу</a> . это необходимо сделать для каждого репозитория, с которым вы используете tortoisegit.</p>

<p>используя встроенный ssh-клиент, поставляемый с git для windows, вам нужно настроить переменную среды home, чтобы git ssh-клиент мог найти ключ.</p><p>например, при установке <em> windows vista </em> это можно сделать, введя <code>setx home c:\users\admin\</code> в командной строке.</p><p>это сделало мой день и исправило проблему с git при условии, что ваш закрытый ключ не защищен паролем. если вы хотите использовать ssh-agent, вы можете запустить ssh-agent cmd.exe (хотя я никогда не делал этого) и ssh-add как обычно.</p><p>обратите внимание, что все инструменты git/ssh должны запускаться из cmd.exe, чтобы не <em> мигать </em> окна.</p><p>если это не работает правильно, использование plink может быть достигнуто путем настройки <strong>git\_ssh</strong>. обратитесь ко всем учебникам svn + ssh; это в основном та же сантехника, которую нужно настроить.</p>

<p>вы можете указать расположение ключа для tortoisegit следующим образом:</p><ul> <li>откройте окно проводника.</li> <li>откройте контекстное меню и перейдите <em>tortoisegit</em> → <em>настройки</em></li> <li>в открывшемся окне перейдите к <em>git</em> → <em>remote</em></li> <li>установите путь к вашему ключу putty в соответствующем поле ввода.</li> </ul><p>скриншот ниже:</p><p><img src="https://i.stack.imgur.com/s5n3c.png" alt="enter image description here"></p>

<p>ни один из предыдущих ответов не сработал для меня. вот что сработало для меня в конце. это на самом деле довольно просто, если вы знаете, что печатать. это не нуждается в замазке.</p><ul> <li>откройте git bash prompt</li> <li>введите 'ssh-keygen' <ul> <li>принять местоположение по умолчанию</li> <li>выберите пустую фразу-пароль (поэтому просто нажмите "ввод" для всех вопросов)</li> </ul> </li> <li>теперь скопируйте открытый ключ на ваш сервер, например: scp ~/.ssh/id\_rsa.pub someuser@someserver.com: ~</li> </ul><p>это бит на вашем собственном компьютере. теперь <code>ssh</code> на целевой сервер, затем выполните</p><pre><code>mkdir -p ~/.ssh cd ~/.ssh cat ../id\_rsa.pub >> authorized\_keys rm ../id\_rsa.pub </code></pre><p>это оно! вы сделали! из git bash сделайте следующее, чтобы проверить:</p><pre><code>ssh someuser@someserver.com ls </code></pre><p>если он перечисляет файлы в вашем домашнем каталоге на сервере git, и тогда все готово!</p><p>для github у вас нет доступа shell к их серверу, но вы можете загрузить ключ, используя их веб-сайт, поэтому для бита "теперь скопируйте на ваш сервер" выполните:</p><ul> <li>в git bash введите "cat ~/.ssh/id\_rsa.pub", выберите результат и скопируйте его в буфер обмена.</li> <li>на веб-сайте github перейдите в "настройки учетной записи", "ключи ssh и gpg", нажмите "новый ключ ssh" и вставьте ключ.</li> </ul>

<p>если вы используете msysgit с инструментами openssh, вам нужно либо создать <code>~/.ssh/id\_rsa</code> или создайте конфигурацию git в <code>~/.ssh/config</code> который указывает на ваш ключ.</p><p>вот пример конфигурации git для bitbucket, которая будет использовать правильное имя пользователя и ключ, отличный от ключа по умолчанию (в случае, если вы сохраняете один ключ для соединений ssh, а другой для учетных записей git).</p><p><strong>~/.ssh/конфигурации</strong>:</p><pre><code>host bitbucket.org hostname bitbucket.org user git identityfile /c/keys/yourkey.key </code></pre><p>попав в git bash, вы можете запустить две команды, чтобы добавить свой ключ в ssh-agent вашего текущего сеанса, чтобы избежать необходимости многократного ввода пароля ключа.</p><pre><code>eval `ssh-agent` ssh-add /c/keys/yourkey.key </code></pre>

<p>я просто установил% home% =% homepath%</p><p>это имеет преимущество работы для всех пользователей, вошедших в систему (каждый из них получает отдельные папки .ssh).</p><p>в vista:</p><ol> <li>щелкните правой кнопкой мыши на компьютере</li> <li>выберите свойства</li> <li>нажмите на дополнительные параметры системы</li> <li>нажмите на переменные среды</li> <li>в нижнем разделе (системные переменные) нажмите new</li> <li>для типа имени переменной: home</li> <li>для типа переменной путь:% homepath%</li> <li>нажмите ок</li> </ol>

<p>в моем случае я использовал git для windows в контейнере docker <code>windowsservercore</code>.</p><p>мой git был установлен <a href="https://en.wikipedia.org/wiki/chocolatey">chocolatey</a> to <code>c:\program files\git</code>.</p><p>мне пришлось обновить файл <code>c:\program files\git\etc\ssh\ssh\_config</code> с этим:</p><pre><code>host example.com identityfile ~/.ssh/id\_rsa </code></pre><p>тогда я мог бы использовать ключ от <code>c:\users\<user>\.ssh\id\_rsa</code></p><p>если вы используете git для windows вместе с openssh для windows. git все еще использует свой собственный <code>ssh</code>.</p><p>плюс, если вы планируете использовать <code>ssh-keyscan host.com > known\_hosts</code> из openssh, будьте осторожны, поскольку вывод по конвейеру из <code>stdout</code> of <code>keyscan</code> (в windows) изменяет кодировку на ucs-2, но openssh может читать только utf-8! поэтому не забудьте изменить <code>known\_hosts</code> кодировка файла.</p>

<p>ваш закрытый ключ необходимо добавить к агенту ssh на вашей рабочей станции. то, как вы этого достигнете, может зависеть от того, какой git-клиент вы используете, однако putty и связанный с ним агент (pageant) могут помочь вам, вот ссылка на официальные двоичные файлы и источник:</p><p> <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html">http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html</a> </p>

<p>стандартное расположение файлов находится в <code>%userprofile%\.ssh</code>.</p><p><code>%userprofile%</code> является эквивалентом $ home в unix (обычно отображается на что-то вроде c:usersyouruserid).если вы используете инструменты ssh, поставляемые с git, которые являются стандартными инструментами командной строки в стиле unix, вы можете использовать что-то вроде <a href="https://github.com/ericblade/ssh-agent-cmd">мой скрипт здесь для работы с ssh-agent во всех оболочках.

наиболее эффективным способом является использование pageant, поскольку он позволит вам написать фразу-пароль только один раз в начале сеанса вместо каждого push. все ответы здесь были слишком короткими, поэтому я выложу подробное руководство здесь: скачать pageant.exe, puttygen.exe, putty.exe а также plink.exe с сайта putty. поместите их в c:puttytools каталог. запустить puttygen.exe. нажмите кнопку generate,. вращайте указатель мыши в верхней части окна, пока индикатор выполнения не заполнится, как программа попросит вас сделать. укажите парольную фразу и повторите ее в следующем текстовом поле. нажмите "сохранить закрытый ключ". обычный каталог для их сохранения - %userprofile%_ssh (на моем компьютере это соответствует c:usersandres.ssh). неважно, что вы называете ключом, но для демонстрации я буду называть его github.ppk. этот файл должен иметь расширение .ppk. скопируйте текст в верхнее текстовое поле в puttygen, помеченное public key for pasting into openssh authorized_keys file и вставьте его в новый ключ ssh в настройках github. дайте ему название, которое описывает, на каком компьютере находится ключ (например, "рабочий ноутбук"). запустить pageant.exe, появится новый значок систрея. щелкните правой кнопкой мыши значок -> добавить ключ. найдите свой файл ppk, введите вашу фразу-пароль. создайте эти новые переменные среды пользователя (через поиск приложения environ через windowsmenu, который найдет edit environment variables for your account): git_ssh = "c:puttytoolsplink.exe" а также svn_ssh = "c:puttytoolsputtyplink.exe" откройте putty.exe и попробуйте подключиться к хосту, на котором вы размещаете свои репозитории git. например, попробуйте подключиться к github.com через ssh, и появится диалоговое окно с вопросом, принимаете ли вы отпечаток пальца сервера: нажмите yes. запустите новый экземпляр вашего mingw64 git console и проверьте наличие переменных среды, написав команду env | grep -i ssh. вы должны быть все готово. попробуйте клонировать протокол git + ssh с вашего хоста. (изначально извлечено из этих двух руководств, которые я объединил в одном:  <a href="https://gist.github.com/dmangiarelli/1a0ae107aaa5c478c51e#ssh-setup">как настроить git для windows  и  <a href="https://rperki.blogspot.hk/2014/09/configure-mingw-w64msys-to-use-putty.html">настройте mingw-w64 + msys для использования putty plink/pageant .)

хорошо, я посмотрел на предложение ..но помещать свои личные ssh-ключи в общую папку я не считал хорошей идеей, поэтому я начал искать, где находится известный хост.поэтому, если вы хотите правильно защитить свой ssh-ключ, вам нужно поместить его в следующий каталог:для windows 7, 8 и 8.1 32-разрядная версия:<blockquote> c:users  appdatalocalvirtualstoreprogram filesgit  </blockquote>для windows 7, 8 и 8.1 64-разрядная версия:<blockquote> c:users  appdatalocalvirtualstoreprogram files (x86)git  </blockquote>

при смешивании github для windows и git gui для windows вы можете столкнуться с проблемами, когда git gui постоянно запрашивает у вас имя пользователя и пароль. лекарство от этого - изменить удаленный url-адрес с https: (это то, что github для windows создает) к протоколу git. в .git каталог в файле конфигурации, найдите:[remote "origin"] url = https://github.com/username/reponame.git fetch = +refs/heads/:refs/remotes/origin/ измените это на:[remote "origin"] url = git@github.com:username/reponame.git fetch = +refs/heads/:refs/remotes/origin/ 

у меня были подобные проблемы, и ни один из ответов здесь не решил проблему. оказывается, моя пара ключей изначально была сгенерирована с пустой парольной фразой. (я знаю, тупой.)как только я создал новую пару ключей и загрузил открытый ключ в github, все снова заработало.

я исправил вышеуказанную проблему, создав<blockquote> ~/.ssh/конфигурации </blockquote>файл и положить:identityfile c:usersadria.sshmysshkey 

pageant (агент ssh, поставляемый с <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html">putty bundle ) решает проблему для меня.у меня есть ярлык в папке "пуск" моего меню "пуск" (c:usersowen.blackerappdataroamingmicrosoftwindowsstart menuprogramsstartup), указывающий на "c:program files (x86)puttypageant.exe" "c:usersowen.blackerdocumentssshowenblackerpersonal.ppk" "c:usersowen.blackerdocumentssshowenblackerwork.ppk", чтобы он загружал мои ssh-ключи при запуске, и это заставляет git "просто работать": o)

следующий ответ также относится к этому вопросу при запуске ssh из учетной записи службы windows: <a href="https://serverfault.com/questions/297500/jenkins-windows-service-with-git-over-ssh/442899#442899">jenkins (служба windows) с git через ssh 

вы можете указать как путь к ключу, так и имя файла ключа, например, в ubuntu. например:ssh -i /home/joe/.ssh/eui_rsa 

многие ответы говорят об этом, но для меня недостаточно быстро!в windows, используя msys (стандартная консоль windows) c:users{you}.sshid_rsaпо сути, это не мешает сканировать установленные ключи (по крайней мере, не на моем новом ноутбуке) и поэтому требует специально id_rsaя столкнулся с этим желанием клонировать некоторые частные репозитории в ruby msys cli для windows 10 64-bit

если вы используете git для windows, после генерации ключей ssh вы должны добавить свой ключ ssh в ssh-agent.смотрите  <a href="https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/">генерация нового ключа ssh и добавление его в ssh-agent .eval $(ssh-agent -s) // tell where the keys are located ssh-add ~/.ssh/id\_rsa </code></pre>

<p>читая ваш комментарий к ответу деклана, попробуйте сначала открыть командную строку (пуск → <em>выполнить</em> → <em>cmd</em>), а затем перейдите к этой папке git/bin и запустите <code>ssh-keygen</code>. теоретически это сгенерирует ключ rsa и поместит его в соответствующий каталог. тогда вам просто нужно найти его и поделиться своим открытым ключом с миром.</p><p>причина, по которой окно "мигает", заключается в том, что windows запускает программу, и когда она выполняется, она закрывает команду prompt, думая, что вы закончили с ней, когда вам действительно нужен вывод.</p>

<p>если вы работаете в windows 7/8, вы должны заглянуть в c:\users\your\_user\_name.ssh. просто скопируйте сюда файл id\_rsa и вставьте его, и все будет работать "из коробки".</p>

<p>одна ошибка, которую я допустил при использовании ssh в windows, заключалась в том, что когда я пытался использовать ключи через клиент git bash, все файлы в ~/.ssh имели неправильные разрешения, но он не пытался сказать мне, что это было проблема.</p><p>в качестве теста убедитесь, что вы установили все в вашем каталоге ~/.ssh на chmod 600.</p>

<p>вы также можете загрузить putty agent (pageant) и добавить закрытый ключ, который вы сгенерировали с помощью putty для сервера.</p><p>git распознает это и использует это для push/pull.</p>

<p>если у вас есть необходимые разрешения на компьютере с windows, и ваша политика разрешает это, я бы предложил установить cygwin ( <a href="https://cygwin.com/">https://cygwin.com/</a> ), особенно если учесть, что у вас есть опыт работы с linux. cygwin позволит обрабатывать ваши ssh-ключи так же, как на любой другой машине с linux/unix. и он предоставляет доступ практически ко всем инструментам cli linux.</p>

<p>я использовал tortoisegit, а также git bash для windows, в зависимости от необходимости. я добавил все в tortoisegit, и он работал нормально, но git bash не собирал его, хотя ключи были в правильном каталоге. оказывается, я должен был сделать это из git bash:</p><pre><code>ssh-add c:\\users\\<your\_user>\\.ssh\\id\_rsa </code></pre><p>конечно, вы можете изменить путь к тому месту, где находится ваш ключ, не забывая использовать <code>\\</code> в качестве разделителя.</p>

<p>в моей системе windows 7 git gui ищет ключ rsa в <code>userprofile/.ssh</code> папка или, более конкретно, <code>c:/users/yourusername/.ssh/</code>.</p><p>сложнее всего было настроить общий хост на hostmonster для принятия ключа. единственный способ заставить его работать - использовать git gui для создания пар ключей (без пароля), а затем копировать и вставлять открытый ключ через панель управления ssh, управление ключами.</p><p>для начала вам нужно создать ключи в git gui, перейдя в меню <em>справка</em>, <em>показать ключ ssh</em>, затем <em>создать ключ</em>. теперь у вас будет два новых ключа в <code>.ssh</code> каталог. открыть <code>.pub</code> файл и скопируйте содержимое.</p><p>войдите в свою панель управления на общем хосте и зайдите в <em> ssh </em>, <em>управление ключами ssh</em> и <em>ключ импорта</em>. вставьте в поле <em>public</em> и убедитесь, что вы указали правильное имя без расширения - мое было <code>id\_rsa</code>. теперь вы должны авторизовать ключ, используя ссылку управления авторизацией, чтобы он был объединен в <code>authorized\_keys</code> файл.</p><p>теперь ваш git gui и ваш git bash должны иметь возможность push с использованием ssh без необходимости ввода пароля. как ни странно, я смог использовать push через ssh через git bash и git gui на моих собственных серверах под управлением linux, это был просто общий хостинг, который мне подходил. я надеюсь, что это кому-то поможет, потому что мне понадобились часы проб и ошибок, чтобы придумать это - и это так просто!</p>

<p>мой <strong>msysgit</strong> опыт openssl/bash git (не в духе putty) заключается в том, что порядок поиска для вашего <code>.ssh/</code> папка выглядит следующим образом.</p><ol> <li><code>%home%/.ssh/</code></li> <li><code>%homedrive%%homepath%/.ssh/</code></li> <li><code>%userprofile%/.ssh/</code></li> </ol><p>следовательно, почему так много людей предлагают установить <code>home</code>, если один из других не соответствует вашим ожиданиям. что еще более важно, вы можете проверить сами; для отладки использовать <code>ssh -v</code> на сервер, который использует аутентификацию с открытым ключом следующим образом:</p><pre><code>$ ssh -v git@github.com openssh\_4.6p1, openssl 0.9.8e 23 feb 2007 debug1: reading configuration data /d/.ssh/config ... debug1: identity file /d/.ssh/identity type -1 debug1: identity file /d/.ssh/id\_rsa type 1 debug1: identity file /d/.ssh/id\_dsa type -1 ... debug1: next authentication method: publickey debug1: trying private key: /d/.ssh/identity debug1: offering public key: /d/.ssh/id\_rsa .. hi kcd83! you've successfully authenticated, but github does not provide shell access. </code></pre><p>мы нашли <code>ssh</code> на неизвестном диске, и ни один из предыдущих ответов, казалось, не объяснял то, что мы видели.</p><p>иногда <code>%homedrive%%homepath%</code> - подключенный сетевой диск (например, <code>h:/</code>), который вызывает ненужные сбои при наличии проблем с сетевым/файловым сервером, даже когда <code>%userprofile%/.ssh</code> является <code>c:/users/username/.ssh</code> и имеет ключи локально. настройка <code>%home%</code> до <code>%userprofile%</code> останавливает его, глядя на удаленный домашний диск.</p>

<p>используя v0.17 git gui в windows, я щелкнул следующую команду меню: <em> справка </em> → <em> показать ключ ssh </em>.</p><p>появился диалог под названием <em> ваш открытый ключ openssh </em>. я сгенерировал ключ и скопировал его в буфер обмена. затем я продолжил следовать инструкциям setup-ssh по <a href="https://help.github.com/articles/generating-ssh-keys">githelp</a> с <em> третьего шага </em> и далее. после этого git gui молча общался с github - не нужно вводить учетные данные.</p>

<p>используя windows 10, я не смог заставить работать сгенерированный ssh ключ, созданный на конкурсе (по крайней мере, для git в командной строке, используя sourcetree, у меня не было проблем) при запуске:</p><pre><code>git push origin master </code></pre><p>итак, мое решение:</p><ol> <li>я открыл "git bash"</li> <li> <p>ран</p> <pre><code>ssh-keygen </code></pre></li> <li> <p>подтвержденные ключи теперь существуют</p> <pre><code>ls ~/.ssh </code></pre></li> <li> <p>открыл id\_rsa.pub в notepad ++, выделил все содержимое</p> </li> <li> <p>добавлен новый ключ в bitbucket, <a href="https://bitbucket.org/account/user/myusername/ssh-keys/">https://bitbucket.org/account/user/myusername/ssh-keys/</a> </p> </li> <li> <p>помечено и вставлено содержимое в поле ключа -> добавить ключ</p> </li> </ol><p>после этого командная строка git сработала. похоже, что он хочет старый формат pem, потому что, если я пытаюсь импортировать этот ключ в зрелище, он говорит так же.</p>

<p>tortoisegit позволяет вам указать ключ, который будет использоваться при клонировании репозитория. просто отметьте "загрузить ключ putty" и перейдите к <code>.ppk</code> файл, как на скриншоте: <img src="https://i.stack.imgur.com/layzt.png" alt="https://i.stack.imgur.com/layzt.png"></p>

<p>если вы используете командную строку git для windows, вы можете сделать следующее:</p><p>открыто <code>cmd.exe</code> и выполнить <code>setx home c:\path\_to\_private\_key</code>.</p><p>создать новую папку, <code>.ssh</code>, (если не существует) внутри <code>c:\path\_to\_private\_key</code> и скопируйте <code>id\_rsa</code> файл (ваш закрытый ключ) в него.</p><p>выполнено. теперь вы можете использовать командную строку git как обычно.</p>