Использование ключа 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 установлены в нашей системе. Например, поищем несуществующую команду «неизвестно».
Мы также создаем каталог.ssh в папке пользователя, если он еще не существует:
mkdir -vp ~/.ssh/
Далее мы объясним, как создать и зарегистрировать ключ SSH для использования GitHub. После завершения этого шага мы покажем вам, как сохранить открытый ключ SSH на GitHub, и объясним, как получить доступ к репозиториям Git через SSH:
- Создайте пару ключей SSH в своей системе
- Депозит открытого SSH-ключа на GitHub
- Доступ к репозиторию 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 для использования с GitHub.
Прежде чем мы сможем использовать наш свежесгенерированный ключ SSH с GitHub, мы выполним еще один шаг. Это необязательно, но настоятельно рекомендуется. Мы добавляем закрытый ключ к так называемому «SSH-агенту». Это фоновая программа, работающая в локальной системе. Запустите следующую команду в командной строке и введите парольную фразу при появлении запроса:
- Windows / Linux
- macOS bis 11 Big Sur
- macOS ab 12 Monterey
Агент SSH имеет доступ к добавленным приватным ключам и позволяет использовать их для соединений, не вводя каждый раз кодовую фразу. Но агент SSH может еще больше:
Внесите SSH-ключ на GitHub
Мы создали пару ключей SSH в нашей локальной системе. Это означает, что половина зашифрованного обмена данными при использовании Git осуществляется через SSH. Оставшийся шаг — разместить открытый SSH-ключ на GitHub.

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

Нажмите кнопку «Новый ключ SSH» в разделе «Ключи SSH», чтобы открыть страницу добавления нового ключа.
Теперь нам нужно содержимое открытого ключа. Перейдите в локальную командную строку и введите следующую команду:
cat ~/.ssh/github_id_ed25519.pub

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

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

Недавно добавленный ключ SSH для GitHub отображается в обзоре ключей.
Доступ к репозиторию GitHub с ключом SSH
Мы сгенерировали ключи локально и разместили открытый SSH-ключ на 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 и используем команду git status для отображения состояния репозитория:
cd ~/Desktop/repo/curl/ git status

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

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

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

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

В нашем пустом репозитории 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-адреса push.
Используйте несколько ключей SSH для разных учетных записей GitHub
Вполне возможно использовать только один ключ SSH для разных учетных записей GitHub или других. Давайте помнить: мы можем поделиться открытым ключом без колебаний.
Технически вполне возможно использовать собственные SSH-ключи для разных сервисов и сайтов. Доступны два метода:
- Вызвать команду SSH с параметрами
- Создать файл конфигурации 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, чтобы записать изменения и закрыть редактор.

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

Подтвердите запись изменений, нажав 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/ один за другим для подключения к серверу. При отсутствии подходящего ключа возникает ошибка «Слишком много ошибок аутентификации».








