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

Как работают удаленные инструменты Windows RSAT для Windows 11 Программирование и разработка

Использование ключа SSH с GitHub обеспечивает доступ к репозиториям Git без пароля. Вместо идентификации пользователя с помощью имени пользователя и пароля компьютер разработчика аутентифицируется с помощью ключа SSH.

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

Secure Shell (SSH) — это стандартный инструмент для зашифрованного доступа к удаленным системам. SSH позволяет войти на сервер с домашней машины разработчика. Git использует SSH в качестве протокола передачи и разрешает чтение и запись в удаленные репозитории.

Зашифрованное соединение используется для аутентификации машины и обеспечения защиты передаваемых данных от подделки. Без них посторонние могли бы вносить произвольные изменения в репозитории.

Git через SSH использует асимметричное шифрование в качестве криптографического метода. Сначала создается пара закрытый и открытый ключи. Это также называется «парой открытого и закрытого ключей». Закрытый ключ остается на вашем собственном компьютере. Открытый ключ передается третьим сторонам, например. Б. Гитхаб.

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

Использование Git через SSH чрезвычайно удобно. После настройки ключ SSH обеспечивает постоянный доступ к GitHub без каких-либо дополнительных действий. Другие протоколы и службы также используют ключи SSH для зашифрованного сетевого соединения. В дополнение к Git с SSH для обмена файлами с серверами можно использовать безопасный протокол SFTP без дополнительной настройки.

Подключение к репозиториям Git обычно выполняется из командной строки. Если ключ SSH был настроен, вы можете легко отправить его в свой собственный репозиторий:

cd ./folder-with-git-repo/
git push

В дополнение к приложению в командной строке приложения с графическим интерфейсом также выигрывают от установленного ключа SSH. Современные FTP-программы поддерживают протокол SSH Flie Transfer Protocol (SFTP ). Это основано на SSH и использует существующие ключи SSH.

Как использовать ключи SSH с GitHub

Чтобы получить доступ к своей учетной записи GitHub с помощью ключа SSH, вы вносите открытый ключ в GitHub. Закрытый ключ остается на вашем собственном компьютере. Аутентификация компьютера для разработки в GitHub осуществляется путем сравнения ключевых данных. Это дает доступ для записи к вашим собственным репозиториям. Этот метод также работает с альтернативами GitHub, такими как Gitlab или Bitbucket.

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

Требования для использования GitHub с ключом SSH

Здесь мы предполагаем, что вы работаете в Linux-подобной среде. К ним относятся Linux/Unix, macOS и Windows с установленным WSL2. Кроме того, должны быть соблюдены следующие условия:

  • Git установлен
  • SSH установлен
  • Аккаунт GitHub создан

Во-первых, давайте проверим, соблюдены ли местные требования. Мы используем следующую команду, чтобы проверить, установлены ли Git и SSH. Если вы не получите ошибку «git not found» или «ssh not found», оба присутствуют:

which git ssh

Git и SSH установлены в нашей систе

Git и SSH установлены в нашей системе. Например, поищем несуществующую команду «неизвестно».

Читайте также:  Разбор задачи 5323068 в электронном учебнике по Assembler

Мы также создаем каталог.ssh в папке пользователя, если он еще не существует:

mkdir -vp ~/.ssh/

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

  1. Создайте пару ключей SSH в своей системе
  2. Депозит открытого SSH-ключа на GitHub
  3. Доступ к репозиторию GitHub с ключом SSH

Создайте и зарегистрируйте ключ SSH в своей системе.

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

Здесь мы придерживаемся официальной документации GitHub. Процедура время от времени меняется. Итак, чтобы исправить ошибки SSH, не помешает заглянуть туда.

Сначала мы запускаем генератор ключей SSH, чтобы сгенерировать пару открытого/закрытого ключа для GitHub. Мы используем команду ssh-keygen, которая по умолчанию является частью установки OpenSSH в системе:

Вызываем ssh-keygen в командной строке и передаем три опции:

  • Опция -f, за которой следует путь и имя нового ключа
  • Опция -t, за которой следует название алгоритма, в данном случае ed25519.
  • Опция -C, за которой следует адрес электронной почты в качестве комментария.
ssh-keygen -f "$HOME/.ssh/github_id_ed25519" -t ed25519 -C "your_email@example.com"

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

Команда SSH keygen просит нас установить «парол

Мы создали ключ SSH для использования с GitHub.

Прежде чем мы сможем использовать наш свежесгенерированный ключ SSH с GitHub, мы выполним еще один шаг. Это необязательно, но настоятельно рекомендуется. Мы добавляем закрытый ключ к так называемому «SSH-агенту». Это фоновая программа, работающая в локальной системе. Запустите следующую команду в командной строке и введите парольную фразу при появлении запроса:

  • Windows / Linux
ssh-add ~/.ssh/github_id_ed25519
  • macOS bis 11 Big Sur
ssh-add -K ~/.ssh/github_id_ed25519
  • macOS ab 12 Monterey
ssh-add --apple-use-keychain ~/.ssh/github_id_ed25519

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

Внесите SSH-ключ на GitHub

Мы создали пару ключей SSH в нашей локальной системе. Это означает, что половина зашифрованного обмена данными при использовании Git осуществляется через SSH. Оставшийся шаг — разместить открытый SSH-ключ на GitHub.

Мы создали пару ключей SSH в нашей локальной систе

Войдите в свою учетную запись GitHub и перейдите на страницу основных настроек.

Войдите в свою учетную запись GitHub и перейди

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

Теперь нам нужно содержимое открытого ключа. Перейдите в локальную командную строку и введите следующую команду:

cat ~/.ssh/github_id_ed25519.pub

Скопируйте выданный открытый ключ и ве

Скопируйте выданный открытый ключ и вернитесь на страницу GitHub.

Читайте также:  "Основные моменты получения и анализа результатов"

Скопируйте выданный открытый ключ и верн

Вставьте скопированный открытый ключ и при желании дайте ему название. Сохраните изменения, нажав на кнопку «Добавить ключ SSH».

Вставьте скопированный открытый ключ и при желании дай

Недавно добавленный ключ SSH для GitHub отображается в обзоре ключей.

Доступ к репозиторию GitHub с ключом SSH

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

ssh -T git@github.com

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

Если вы впервые подключаетесь к GitHub с этой

Подтвердите добавление сервера, набрав «yes» и нажав Enter.

При доступе к репозиториям GitHub мы различаем доступ для чтения и записи. Публичные репозитории могут быть прочитаны кем угодно; для этого не требуется аутентификация, т. е. ключ SSH.

Чтобы загрузить репозиторий как локальную копию, используйте команду git clone. Покажем это на примере репозитория популярного сетевого инструмента cURL. Мы посещаем страницу GitHub общедоступного репозитория cURL и копируем URL-адрес клона:

Чтобы загрузить репозиторий как локальную копи

Краткий обзор кода репозитория cURL. / Источник: https://github.com/curl/curl

Чтобы загрузить репозиторий как локальную копи

Копируем «Клонировать URL» репозитория cURL. / Источник: https://github.com/curl/curl

Вооружившись URL-адресом клона, мы переключаемся обратно в локальную командную строку. Создаем папку примера репо на рабочем столе и переключаемся на нее. Затем мы клонируем репозиторий cURL, вызывая git clone с URL-адресом клона:

cd ~/Desktop/
mkdir -p repo && cd repo
git clone https://github.com/curl/curl.git

Клонированный репозиторий cURL теп

Клонированный репозиторий cURL теперь находится в папке curl.

Переключаемся в папку репозитория cURL и используем команду git status для отображения состояния репозитория:

cd ~/Desktop/repo/curl/
git status

Запуск состояния git показывает, что сост

Запуск состояния git показывает, что состояние нормальное.

Команда git pull, которая обновляет репозиторий, требует только доступа для чтения. Запускаем git-pull в папке репозитория ; в принципе это работает, даже если, вероятно, пока нет изменений:

git pull

Теперь попробуем записать в репозиторий GitHub с помощью команды git push:

git push

перь попробуем записать в репозиторий GitHub с

Git pull работает; Git push терпит неудачу, потому что наша машина не аутентифицирована.

Что происходит? URL-адрес клонирования, используемый для клонирования общедоступного репозитория cURL, начинается с HTTPS. Соответственно, URL-адрес HTTPS сохраняется как «Источник» для нашего локального клона. Проверяем происхождение командой git show:

git remote -v show

Отображаются URL-адреса для операций извле

Отображаются URL-адреса для операций извлечения и отправки Git.

Для доступа на чтение достаточно URL-адреса HTTPS, но для записи в репозитории GitHub требуется ключ SSH. Потому что аутентификация пользователей по имени пользователя/паролю не поддерживается на GitHub с августа 2021 года.

Чтобы все же иметь возможность протестировать Git-Push, используем хитрость. Для начала создадим собственный пустой репозиторий на GitHub:

Чтобы все же иметь возможность протестировать Git-Push

Мы создаем новый репозиторий под названием «test».

В нашем пустом репозитории GitHub есть инстр

В нашем пустом репозитории GitHub есть инструкции, как заполнить его кодом.

В нашей системе, следуя инструкциям на GitHub, мы меняем push-URL локального клона cURL, чтобы использовать наш пустой репозиторий GitHub в качестве источника. Мы также устанавливаем ветку на «основную». Затем мы запускаем git push; операция завершается успешно и использует наш ранее созданный SSH-ключ для аутентификации нас на GitHub.

git remote set-url origin git@github.com:<user>/test.git</user>
git branch -M main
git push -u origin main

Git push работает после изменения URL-адре

Git push работает после изменения URL-адреса push.

Читайте также:  Полное руководство по группировке данных в SQLite для начинающих

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

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

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

  1. Вызвать команду SSH с параметрами
  2. Создать файл конфигурации SSH

Команды SSH с параметрами могут быть очень длинными, поэтому мы не будем здесь показывать этот подход. В целом удобнее работать с файлом конфигурации SSH. Это требует немного больше усилий при настройке вашей собственной системы, но это нужно сделать только один раз. Вот обзор папок и файлов, задействованных в конфигурации SSH:

SSH-конфигурация путь Объяснение
папка конфигурации ~/.ssh/ Содержит конфигурацию SSH и пары ключей.
закрытый ключ ~/.ssh/имя-ключа Закрытый ключ пары ключей.
открытый ключ ~/.ssh/имя-ключа.pub Открытый ключ пары ключей.
файл конфигурации ~/.ssh/config Файл конфигурации SSH.
известные хосты ~/.ssh/known_hosts Список хостов, подключенных в прошлом.

Во-первых, давайте создадим файл конфигурации SSH. Создаем файл, настраиваем права пользователя и открываем его в редакторе командной строки:

touch ~/.ssh/config
chmod 600 ~/.ssh/config
nano ~/.ssh/config

Затем скопируйте следующий блок в Блокнот и следуйте скриншотам, чтобы сохранить файл:

# Github
Host github github.com
    HostName github.com
    User git
    IdentityFile "~/.ssh/github_id_ed25519"
    IdentitiesOnly yes

Вставьте блок конфигурации и нажмите

Вставьте блок конфигурации и нажмите Ctrl+X, чтобы записать изменения и закрыть редактор.

дтвердите имя файла, нажав E

Подтвердите имя файла, нажав Enter.

После вставки блока конфигурации GitHub

Подтвердите запись изменений, нажав Enter.

После вставки блока конфигурации GitHub можно установить SSH-соединение, указав указанную аббревиатуру хоста github:

ssh -T github

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

Отношение Объяснение Пример
хозяин Может содержать любое количество имен. github.com github
имя хоста имя хоста удаленной системы, на которой работает SSH; также можно использовать IP-адрес. github.com
пользователи Пользователи Git в удаленной системе; надо взять точно. мерзавец
IdentityFile Абсолютный путь к закрытому ключу. Настройте это, если вы используете несколько клавиш. ~/.ssh/github_id_ed25519
только удостоверения Указывает, что к этому хосту можно получить доступ только по ключу. да

Последний совет. Если вы создаете конфигурации SSH для нескольких хостов с собственными ключами, вам следует добавить в конец файла блок с настройками для незарегистрированных хостов:

# For all hosts
Host *
IdentitiesOnly no
IgnoreUnknown UseKeychain, AddKeysToAgent
UseKeychain yes
AddKeysToAgent yes

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

ssh user@host

Без строки «IdentitiesOnly no» в окончательной конфигурации SSH будет пробовать каждый ключ в ~./ssh/ один за другим для подключения к серверу. При отсутствии подходящего ключа возникает ошибка «Слишком много ошибок аутентификации».

Оцените статью
Блог о программировании
Добавить комментарий