Содержание
Настроим пошагово Git SSH для Windows 10. Это позволит вам выполнять команды git без ввода пароля от своей учетной записи GitHub.
- Генерация ключа SSH.
- Добавление SSH-ключа в ssh-agent.
- Добавление ключа SSH в учетную запись GitHub.
Генерация ключа SSH
Откройте bash/терминал. Добавьте следующий текст, подставив свой адрес электронной почты GitHub.
Будет создан ключ ssh, используя e-mail в качестве метки.
Когда вам будет предложено «Введите файл, в котором вы хотите сохранить ключ», нажмите Enter. Это установит в местоположение по умолчанию.
Enter a file in which to save the key (/c/Users/you/.ssh/id_rsa):[Press enter]
Далее введите безопасную фразу-пароль дважды или просто нажмите Enter.
Добавление SSH-ключа в ssh-agent
Чтобы запустить ssh-агент введите следующую команду.
На экране отобразится похожая строка.
Agent pid 31724
Добавим свой закрытый ключ SSH в ssh-agent. Если вы создали свой ключ с другим именем (или добавляете существующий ключ с другим именем), замените в команде id_rsa на имя вашего файла закрытого (приватного) ключа.
Ключ будет успешно добавлен в ssh-агент.
Добавление ключа SSH в учетную запись GitHub
Мы сгенерировали у себя на компьютере закрытый ключ SSH и добавили его в ssh-агент. Теперь нам необходимо добавить SSH ключ в учетную запись GitHub.
Сейчас нам необходимо скопировать SSH ключ в буфер обмена.
Способов есть несколько, но я же вам предлагаю следующее решения для Windows 10: введите команду ниже.
Прямо в терминале вы увидите содержимое необходимого файла с ключем. Скопируйте его в буфер.
Теперь зайдите на вашу страницу GitHubSettings.
Перейдите во вкладку SSH and GPG keysи нажмите на кнопку New SSH key для добавления SSH ключа в вашу учетную запись GitHub.
В поле Title добавьте заголок для данного ключа. Например, если вы захотите настроить SSH доступ на нескольких устройствах, то вы будите понимать какой ключ принадлежит какому устройству.
В поле Key добавьте свой ssh-ключ, который вы скопировали в буфер обмена на предыдущем шаге.
Нажмите Add SSH key.
Для подтверждения вам потребуется ввести свой пароль от учетной записи GitHub.
На этом настройка SSH для вашего устройства завершена, теперь вы можете работать с git без ввода пароля от своей учетной записи.
Если вам понравилась данная статья, можете прочитать как настроить моментальную загрузку сайта на хостинг и синхронизацию файлов.
08/12/2019 08:51
Если попытка склонировать любой приватный репозиторий с bitbucket или github по ssh вызывает ошибку вида:
Permission denied (publickey). fatal: The remote end hung up unexpectedly
То это значит, что вы не прошли авторизацию по ssh-ключам. Тут 2 варианта:
- Клонировать через https схему, при этом будет запрошен имя пользователя и пароль от аккаунта. Минус тот, что при любом обращении к центральному серверу (пр.
git fetch
,git pull
) придётся снова вводить пароль. - Настроить ssh-ключи, чтобы git-аутентификация проходила автоматически без ввода паролей и т.д.
Рассмотрим подробнее как настроить ssh-ключи на linux (ubuntu) и добавить их на github и bitbucket.
Генерация ssh-ключей.
Выполняем следующие команды:
cd ~/.ssh ssh-keygen -t rsa
После этого будет предложено ввести имя файла с ключами, либо если имя файла не указать, ключи будут созданы в файле id_rsa. Задаём имя файла с ключами, например, как «git_rsa«. Таким образом мы будем знать, что этот ssh-ключ используется конкретно для git-авторизации. Хотя, никто не запрещает использовать один и тот же ключ id_rsa. Ключи будут храниться в домашней директории пользователя ~/.ssh/git_rsa и ~/.ssh/git_rsa.pub.
На запрос о установке пароля на связку ключей можно нажать enter, т.е. оставить пароль пустым (это безопасно). Теперь в каталоге ~/.ssh
появились 2 файла ключа:
- git_rsa — приватный, который нельзя никому сообщать
- git_rsa.pub — публичный, который мы сообщим gitbucket и github
По умолчанию при подключении к серверу для ssh-авторизации используется ключ с именем id_rsa. Мы это обойдём. Чтобы не указывать имя нужного нам ключа (git_rsa) при каждом подключении к серверу, отредактируйте файл ~/.ssh/config
(если файла ещё нет, создайте), добавьте содержимое для идентификации bitbucket-хоста и github:
Host bitbucket.org IdentityFile ~/.ssh/git_rsa Host github.com IdentityFile ~/.ssh/git_rsa
Всё, на нашем комьютере или сервере (смотря где создавали ключи) нужные ключи созданы. Остаётся сообщить (добавить) наш публичный ключ туда, где мы будем проходить авторизацию, т.е. на github и bitbucket.
Добавление ssh-ключа на github
В своём профиле нажимаем Edit Profile -> SSH Keys -> Add SSH key. После этого указываем title (это название ключа, вводится для удобства) и key (это сам ключ, т.е. вставляем сюда всё содержимое файла ~/.ssh/git_rsa.pub). Нажимаем Add key.
Добавление ssh-ключа на bitbucket
Авторизуемся, заходим в свой аккаунт. Нажимаем SSH keys -> Add Key. После ввода ключа в попап окошке нажимаем кнопку Add key для сохранения ssh-ключа.
Теперь вы можете клонировать свои приватные репозитории по ssh (git@github) без ввода пароля.
Эта статья подразумевает, что у вас уже есть учетная запись на github.com, вы скачали и установили Git Bash с сайта git-scm.com и теперь хотите работать со своими репозиториями, используя SSH.
Собственно о том, как настроить этот самый SSH и пойдет речь в этой статье.
Но сначала о том, что особенного в этом методе подключения.
Подключение с использованием SSH подразумевает генерацию пары ключей, добавление этих ключей к SSH-агенту, при помощи которого и будет происходит взаимодействие, а также добавление открытого ключа к своему аккаунту на github.com.
Использование SSH избавляет вас от необходимости использовать имя и пароль, так как вместо этого используется пара ключей — открытый и закрытый (public and private), однако в целях безопасности закрытый ключ должен быть зашифрован при помощи пароля.
Для начала, проверим нет ли у нас каких либо уже существующих ключей.
Запустим Git Bash и введем команду
ls -al ~/.ssh
Этой командой мы получаем список файлов из папки .ssh, находящейся в профиле текущего пользователя — ~. Если вы там обнаружите что-то вроде id_rsa и id_rsa.pub, то, возможно, ключ у вас уже есть, и если вместо генерации новых вы решите использовать существующий, то можете сразу переходить к шагу добавления ключей к ssh-агенту. Мы же тут сделаем вид, что никаких ключей у нас нет и приступим к их генерации.
Генерируем ключи
Для генерации новой пары ключей в консоли git bash введите следующую команду:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
В этой команде параметр -t задает тип, в данном случае мы используем rsa. Параметр -b задает длину ключа, 4096 выглядит вполне подходящим значением. Параметр -C задает комментарий к генерируемым ключам, в котором мы указываем свой email адрес.
Git bash сообщит что происходит генерация ключа, а после попросит указать место сохранения файлов с ключами. Мы можем либо нажать Enter и согласиться с местоположением и именем по умолчанию: ~/.ssh/id_rsa и ~/.ssh/id_rsa.pub, либо указать свой вариант.
Добавляем ключи к ssh-агенту
Теперь нам нужно добавить сгенерированные ключи к ssh-агенту.
Тут есть интересная вещь, если у вас установлен Git Desktop, то вы можете управлять репозиториями через него и не обращать внимания на то, о чем мы тут говорим. Однако же, управление Git через консоль с помощью какой либо утилиты, вроде Git for Windows, о чем мы здесь и рассуждаем, является более предпочтительным методом, поэтому стоит обратить внимание на вопросы запуска ssh-агента. Далее в статье мы рассмотрим, как настроить его автоматический запуск, сейчас же мы запустим его вручную, командой:
eval $(ssh-agent -s)
Теперь нам нужно добавить созданные ключи к ssh-агенту. Сделаем мы это командой:
$ ssh-add ~/.ssh/id_rsa
В данном случае мы указали местоположение по-умолчанию. Именно в этом файле будут находиться ключи в случае, если на вопрос о месте сохранения файлов ключей при их генерации вы приняли значение по-умолчанию, нажав Enter.
Если вы указали некоторое отличное от значения по-умолчанию местоположение, то в качестве аргумента вы просто указываете нужный путь и имя файла.
Добавление ключа к вашей учетной записи на GitHub.com
Итак, что мы имеем. Мы сгенерировали пару ключей, ссобщили об их местонахождении ssh-агенту. Теперь же нам нужно также сообщить сайту GitHub.com об их существовании. Точнее о существовании открытого ключа из созданной нами пары.
Для этого сначала получим значение открытого ключа при помощи следующей команды:
clip < ~/.ssh/id_rsa.pub
Эта команда копирует содержимое файла открытого ключа (опять же из расположения по-умолчанию) в буфер обмена. Этого же результата мы можем достичь, открыв вышеупомянутый файл в каком-либо текстовом редакторе и скопировав его содержимое.
Далее заходим на сайт GitHub.com под своей учетной записью и, щелкнув на своем аватаре, выбираем Settings. В меню, расположенном в левой части, выбираем SSH and GPG keys и нажимаем New SSH key. Заполняем поле Title, для того, чтобы нам самим было понятнее, что это за ключ, вставляем содержимое файла открытого ключа из буфера в поле Key и нажимаем Add SSH key.
Проверка SSH-соединения
Теперь давайте проверим ssh-соединение. Для этого в консоли Git Bash введем команду:
ssh -T git@github.com
При этом вы получите просьбу ввести пароль шифрования закрытого ключа.
После ввода пароля вы можете получить что-то вроде:
The authenticity of host 'github.com (192.30.252.1)' can't be established. RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48. Are you sure you want to continue connecting (yes/no)?
или:
The authenticity of host 'github.com (192.30.252.1)' can't be established. RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8. Are you sure you want to continue connecting (yes/no)?
В этом случае проверьте, что и вы и Git Bash имеете в виду один и тот же ключ, сверив выведенное значение отпечатка (fingerprint) с тем, что было получено при генерации ключей. Ели все в порядке, отвечайте на вопрос утвердительно.
В итоге вы должны получить сообщение:
Hi username! You've successfully authenticated, but GitHub does not provide shell access.
где вместо username должно присутсвовать имя вашей учетной записи.
Изменение пароля шифрования закрытого ключа
ssh-keygen -p
Автоматический запуск ssh-агента при старте Git Bash
Для того, чтобы ssh-агент каждый раз запускался автоматически при старте Git Bash, добавьте в файл ~/.profile или ~/.bashrc следующий код:
env=~/.ssh/agent.env agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; } agent_start () { (umask 077; ssh-agent >| "$env") . "$env" >| /dev/null ; } agent_load_env # agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?) if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then agent_start ssh-add elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then ssh-add fi unset env
Теперь при запуске Git Bash также будет запускаться и ssh-агент. Если при генерации ключей (или позже) мы задали пароль для шифрования закрытого ключа, при запуске, ssh-агент будет проявлять интерес к его значению. Поянтно, что после закрытия Git Bash, его содержимое будет забыто и закрытый ключ будет в безопасности.
Если же мы хотим, чтобы забытие пароля шифрования ssh-агентом происходило быстрее, мы можем задать нужный интервал времени в секундах при помощи команды:
ssh-add -t 300
Страницы в социальных сетях:
Twitter: https://twitter.com/vssethFacebook: https://fb.com/inpowershellVKontakte: https://vk.com/inpowershell
Используемые источники:
- https://only-to-top.ru/blog/tools/2019-12-08-git-ssh-windows.html
- https://jeka.by/post/1051/setup-ssh-keys-for-bitbucket-github/
- https://sergeyvasin.net/2017/03/30/git-ssh/