Как сгенерировать ключи SSH для GitHub

Опубликовано: 2022-02-05

Git и GitHub — важные инструменты для каждого разработчика. Они широко используются практически во всех проектах разработки программного обеспечения.

Существуют и другие службы хостинга Git, такие как Gitlab и Bitbucket, но GitHub — самый популярный выбор для разработчиков. Вы даже можете отредактировать свой профиль, чтобы казаться более привлекательным для рекрутеров.

Вы можете использовать Git и GitHub для организации своих проектов, сотрудничества с другими разработчиками и, конечно же, в Kinsta.

Но поскольку Git и GitHub — это связанные, но разные инструменты, вам необходимо постоянно обновлять рабочий процесс с каждым из них.

Мы рекомендуем использовать ключи SSH для каждой из ваших машин. Итак, в этом руководстве вы узнаете, что это такое, некоторые из их преимуществ и как создавать и настраивать ключи GitHub SSH.

Давайте начнем!

Что такое SSH-ключи?

Проще говоря, ключи SSH — это учетные данные, используемые для протокола SSH (Secure Shell) для обеспечения безопасного доступа к удаленным компьютерам через Интернет. Обычно такая аутентификация происходит в среде командной строки.

Этот протокол основан на архитектуре клиент-сервер, что означает, что вы как пользователь (или «клиент») должны использовать специальное программное обеспечение, называемое SSH-клиентом, для входа на удаленный сервер и выполнения команд. Это в основном то, что вы делаете при аутентификации через терминал в GitHub.

Терминал, показывающий две команды: «git commit -am «Добавлен комментарий в файл примера структурированного программирования» и «git push» с успешным ответом от сервера GitHub.
Git толчок.

Но SSH используется не только для GitHub. Он широко используется другими платформами, такими как Kinsta, Google Cloud и веб-сервисы Amazon, для создания безопасного канала для доступа к их услугам.

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

Открытые и закрытые ключи

Начнем с основ.

Протокол SSH использует технику криптографии, называемую асимметричным шифрованием . Этот термин может показаться сложным и странным, но нет ничего более далекого от истины.

По сути, асимметричное шифрование — это система, в которой используется пара ключей, а именно открытый и закрытый ключи.

Как вы можете догадаться, открытый ключ может быть передан кому угодно. Его основная цель — шифровать данные, преобразовывая сообщение в секретный код или зашифрованный текст. Этот ключ обычно отправляется в другие системы — например, на серверы — для шифрования данных перед их отправкой через Интернет.

С другой стороны, закрытый ключ — это тот, который вы должны хранить при себе. Он используется для расшифровки зашифрованных данных с помощью вашего открытого ключа. Без него невозможно расшифровать вашу зашифрованную информацию.

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

Вот что происходит в фоновом режиме при подключении к серверу через SSH:

  1. Клиент отправляет открытый ключ на сервер.
  2. Сервер просит клиента подписать случайное сообщение, зашифрованное открытым ключом, с использованием закрытого ключа.
  3. Клиент подписывает сообщение и отправляет результат на сервер.
  4. Между клиентом и сервером устанавливается безопасное соединение.

Важно хранить ваши личные ключи в безопасности и ни при каких обстоятельствах не делиться ими с кем-либо. Они буквально являются ключом ко всей информации, отправленной вам.

Использование ключей SSH с GitHub

С 13 августа 2021 года Github больше не принимает аутентификацию по паролю для доступа к командной строке. Это означает, что теперь вам нужно пройти аутентификацию с помощью личного токена доступа или использовать ключ SSH (что немного удобнее).

Вот что происходит, когда вы пытаетесь пройти аутентификацию с помощью пароля GitHub через HTTP в терминале:

 Username for 'https://github.com': yourusername Password for 'https://[email protected]': remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information. fatal: Authentication failed for 'https://github.com/yourusername/repository.git/'

GitHub нужен ваш открытый ключ, чтобы разрешить вам редактировать любой из ваших репозиториев через SSH.

Давайте посмотрим, как вы можете генерировать SSH-ключи локально.

Как сгенерировать ключи SSH локально

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

Прежде чем мы двинемся дальше, у вас уже должна быть учетная запись GitHub и терминал/командная строка с установленным Git в вашей системе. Если вы работаете в Windows, убедитесь, что вы установили Git bash, в котором есть все инструменты, которые вам понадобятся, а также встроенный этот учебник.

Клиент OpenSSH — это самое популярное программное обеспечение с открытым исходным кодом, используемое для подключения через SSH. Вам не нужно беспокоиться об операционной системе, поскольку она установлена ​​по умолчанию в Linux, macOS и Windows 10.

Вам нужно запустить командную строку в Windows или терминал в системах на базе Unix, чтобы сгенерировать локальные ключи SSH. Обычно вы можете сделать это, выполнив поиск «терминал», «cmd» или «powershell» на панели приложений, а затем щелкнув появившийся значок.

Средство поиска приложений, показывающее различные терминальные приложения, включая «Эмулятор терминала», «Alacritty» и «Kitty».
Терминальный поиск приложений.

После этого у вас должно появиться окно, похожее на следующее изображение.

Полупрозрачное терминальное приложение, работающее с рыбной оболочкой.
Терминальное приложение.

Выполните следующую команду, чтобы сгенерировать локальную пару ключей SSH:

 ssh-keygen -t ed25519 -C "[email protected]"

Пришло время открыть вам секрет: никто толком не может запомнить эту команду! Большинству разработчиков приходится каждый раз гуглить, потому что:

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

Однако важно понимать каждую команду, которую мы вводим в наши терминалы, поэтому давайте посмотрим, что означает каждая ее часть.

  • ssh-keygen: инструмент командной строки, используемый для создания новой пары ключей SSH. Вы можете увидеть его флаги с помощью ssh-keygen help
  • -t ed25519: флаг -t используется для указания алгоритма, используемого для создания цифровой подписи пары ключей. Если ваша система поддерживает его, ed25519 — лучший алгоритм, который вы можете использовать для создания пар ключей SSH.
  • -C «электронная почта»: флаг -c используется для предоставления пользовательского комментария в конце открытого ключа, которым обычно является адрес электронной почты или идентификация создателя пары ключей.

После того, как вы ввели команду в свой терминал, вам нужно будет ввести файл, в который вы хотите сохранить ключи. По умолчанию он находится в вашем домашнем каталоге, в скрытой папке с именем «.ssh», но вы можете изменить его на любой другой.

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

Вот как выглядит весь процесс:

Команда ssh-keygen с различными сообщениями, включая файл, в котором будут сохранены ключи «/home/daniel/.ssh/kinsta_keys», ввод парольной фразы и полученный отпечаток ключа.
Команда ssh-keygen.

Как видите, эта команда создает два файла в выбранном вами каталоге (обычно ~/.ssh ): открытый ключ с расширением .pub и закрытый ключ без расширения.

Позже мы покажем вам, как добавить открытый ключ в вашу учетную запись GitHub.

Добавьте ключ SSH в ssh-агент

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

По этой причине вы собираетесь добавить свой новый закрытый ключ к этому агенту. Вот как:

  1. Убедитесь, что ssh-агент работает в фоновом режиме.
     eval `ssh-agent` # Agent pid 334065

    Если вы получите сообщение, похожее на это, если все в порядке. Это означает, что ssh-агент работает под определенным идентификатором процесса (PID).

  2. Добавьте свой закрытый ключ SSH (тот, у которого нет расширения) в ssh-agent.
     ssh-add ~/.ssh/kinsta_keys

    Замените kinsta_keys на имя вашего ключа SSH. Если это первый созданный вами ключ, он должен называться «id_algorithm_used», например, id_ed25519 .

Добавить ключ SSH в учетную запись GitHub

Последний шаг — добавить открытый ключ в свою учетную запись GitHub. Просто следуйте этим инструкциям:

  1. Скопируйте открытый ключ SSH в буфер обмена. Вы можете открыть файл, в котором он находится, с помощью текстового редактора и скопировать его или использовать терминал, чтобы показать его содержимое.
     cat ~/.ssh/kinsta_keys.pub # ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJl3dIeudNqd0DPMRD6OIh65tjkxFNOtwGcWB2gCgPhk [email protected]
  2. Войдите в GitHub] и перейдите в правый верхний раздел страницы, нажмите на фотографию своего профиля и выберите « Настройки».

    Верхняя правая панель GitHub, показывающая различные разделы со стрелкой, указывающей на раздел «Настройки».
    Настройки гитхаба.

  3. Затем в настройках профиля нажмите ключи SSH и GPG .

    Панель настроек профиля, показывающая опцию ключей SSH и GPG.
    Ключи SSH и GPG.

  4. Нажмите кнопку Новый ключ SSH .

    Раздел «Ключи SSH» со стрелкой, указывающей на кнопку «Новый ключ SSH».
    Новая кнопка ключа SSH.

  5. Дайте своему новому ключу SSH на GitHub название — обычно это устройство, с которого вы будете использовать этот ключ. Затем вставьте ключ в область ключей .

    Добавьте новую форму ключа SSH с полями «Название» и «Ключ».
    Добавьте новую форму ключа SSH.

  6. Добавьте свой SSH-ключ.

    Добавить кнопку ключа SSH.
    Добавить кнопку ключа SSH.

Протестируйте SSH-соединение с помощью Repo Push

Пришло время проверить все, что вы уже сделали. Вы собираетесь изменить, зафиксировать и отправить в один из существующих репозиториев с помощью SSH, чтобы убедиться, что ваше соединение настроено правильно.

Все планы хостинга Kinsta включают круглосуточную поддержку наших опытных разработчиков и инженеров WordPress. Общайтесь с той же командой, которая поддерживает наших клиентов из списка Fortune 500. Ознакомьтесь с нашими планами!

В нашем примере мы изменим простой HTML-сайт, созданный в нашем руководстве по Git для веб-разработки.

Во-первых, нам нужно клонировать репозиторий на нашу локальную машину. Мы можем перейти на страницу репозитория на GitHub и скопировать предоставленный SSH-адрес.

Страница GitHub с командой клонирования SSH.
Команда клонирования SSH.

Затем клонируйте репозиторий с помощью терминала:

 git clone [email protected]:DaniDiazTech/HTML-site.git

Теперь добавим простой <h1> в файл index.html :

 ... <div class="container my-2"> <h1 class="text-center">A new title!<h1> </div> <div class="container my-3"> ...
Простой HTML-сайт с заголовком «Новое название» и четырьмя изображениями технических предметов.
Простой HTML-сайт.

Мы не затрагиваем JavaScript или CSS, чтобы сделать это редактирование простым. Но если вы хорошо разбираетесь в JavaScript, вы можете найти место в Kinsta. Проверьте навыки кодирования, которые вам нужны, чтобы стать частью команды Kinsta.

После этого зафиксируйте изменения:

 git commit -am "Added a simple title"

И отправьте их на GitHub, как обычно.

 git push

Если все прошло хорошо, поздравляю! Вы просто установили SSH-соединение между вашей машиной и GitHub.

Управление несколькими ключами SSH для разных учетных записей GitHub

Если у вас несколько учетных записей GitHub — скажем, одна для ваших личных проектов и одна для работы — сложно использовать SSH для них обеих. Обычно вам потребуются отдельные машины для аутентификации в разных учетных записях GitHub.

Но это можно легко решить, настроив конфигурационный файл SSH.

Давайте углубимся в это.

  1. Создайте еще одну пару ключей SSH и добавьте ее в другую учетную запись GitHub. Запомните имя файла, которому вы назначаете новый ключ.
     ssh-keygen -t ed25519 -C "[email protected]"
  2. Создайте файл конфигурации SSH. Файл конфигурации сообщает программе ssh, как она должна себя вести. По умолчанию файл конфигурации может не существовать, поэтому создайте его внутри папки .ssh/:
     touch ~/.ssh/config
  3. Измените файл конфигурации SSH. Откройте файл конфигурации и вставьте код ниже:
     #Your day-to-day GitHub account Host github.com HostName github.com IdentityFile ~/.ssh/id_ed25519 IdentitiesOnly yes # Work account Host github-work HostName github.com IdentityFile ~/.ssh/work_key_file IdentitiesOnly yes

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

 [email protected]:workaccount/project.git

…к:

 [email protected]:workaccount/project.git

Резюме

Поздравляем — вы получили большую часть практических знаний, необходимых для подключения к GitHub через SSH!

В этом руководстве обсуждалась потребность в протоколе SSH, различия между открытыми и закрытыми ключами, как генерировать ключи, добавлять их в GitHub и даже управлять несколькими ключами SSH для разных учетных записей GitHub. Имейте в виду, что если вы не хотите потерять доступ ко всему, ваш закрытый ключ должен оставаться таким: закрытым.

Обладая этими знаниями, вы готовы разработать безупречный рабочий процесс с помощью Git и GitHub. Продолжайте кодировать!