Подключение Git Bash к GitHub.com с использованием SSH

Эта статья подразумевает, что у вас уже есть учетная запись на 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/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell


Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s