- 4.3 Git on the Server — Generating Your SSH Public Key
- Generating Your SSH Public Key
- 4.3 Git на сервере — Генерация открытого SSH ключа
- Генерация открытого SSH ключа
- Git SSH Windows — пошаговое руководство
- Генерация ключа SSH
- Добавление SSH-ключа в ssh-agent
- Добавление ключа SSH в учетную запись GitHub
- Generating a new SSH key and adding it to the ssh-agent
- In this article
- Generating a new SSH key
- Adding your SSH key to the ssh-agent
- Полезный блог
- Шаг 1. Настраиваем доступ по SSH-ключам к первому профилю
- Генерируем пару ключей на локальной машине
- Сохраняем открытый ключ в профиле на GitHub
- Шаг 2. Настраиваем ключи для второго профиля
- Шаг 3. Настраиваем SSH на работу с двумя парами ключей
4.3 Git on the Server — Generating Your SSH Public Key
Generating Your SSH Public Key
Many Git servers authenticate using SSH public keys. In order to provide a public key, each user in your system must generate one if they don’t already have one. This process is similar across all operating systems. First, you should check to make sure you don’t already have a key. By default, a user’s SSH keys are stored in that user’s
/.ssh directory. You can easily check to see if you have a key already by going to that directory and listing the contents:
You’re looking for a pair of files named something like id_dsa or id_rsa and a matching file with a .pub extension. The .pub file is your public key, and the other file is the corresponding private key. If you don’t have these files (or you don’t even have a .ssh directory), you can create them by running a program called ssh-keygen , which is provided with the SSH package on Linux/macOS systems and comes with Git for Windows:
First it confirms where you want to save the key ( .ssh/id_rsa ), and then it asks twice for a passphrase, which you can leave empty if you don’t want to type a password when you use the key. However, if you do use a password, make sure to add the -o option; it saves the private key in a format that is more resistant to brute-force password cracking than is the default format. You can also use the ssh-agent tool to prevent having to enter the password each time.
Now, each user that does this has to send their public key to you or whoever is administrating the Git server (assuming you’re using an SSH server setup that requires public keys). All they have to do is copy the contents of the .pub file and email it. The public keys look something like this:
4.3 Git на сервере — Генерация открытого SSH ключа
Генерация открытого SSH ключа
Как отмечалось ранее, многие Git-серверы используют аутентификацию по открытым SSH-ключам. Для того чтобы предоставить открытый ключ, каждый пользователь в системе должен его сгенерировать, если только этого уже не было сделано ранее. Этот процесс аналогичен во всех операционных системах. Сначала вам стоит убедиться, что у вас ещё нет ключа. По умолчанию пользовательские SSH ключи сохраняются в каталоге
/.ssh домашнем каталоге пользователя. Вы можете легко проверить наличие ключа перейдя в этот каталог и посмотрев его содержимое:
Ищите файл с именем id_dsa или id_rsa и соответствующий ему файл с расширением .pub . Файл с расширением .pub — это ваш открытый ключ, а второй файл — ваш приватный ключ. Если указанные файлы у вас отсутствуют (или даже нет каталога .ssh ), вы можете создать их используя программу ssh-keygen , которая входит в состав пакета SSH в системах Linux/Mac, а для Windows поставляется вместе с Git:
Сначала программа попросит указать расположение файла для сохранения ключа ( .ssh/id_rsa ), затем дважды ввести пароль для шифрования. Если вы не хотите вводить пароль каждый раз при использовании ключа, то можете оставить его пустым или использовать программу ssh-agent . Если вы решили использовать пароль для приватного ключа, то настоятельно рекомендуется использовать опцию -o , которая позволяет сохранить ключ в формате, более устойчивом ко взлому методом подбора, чем стандартный формат.
Теперь каждый пользователь должен отправить свой открытый ключ вам или тому, кто администрирует Git-сервер (подразумевается, что ваш SSH-сервер уже настроен на работу с открытыми ключами). Для этого достаточно скопировать содержимое файла с расширением .pub и отправить его по электронной почте. Открытый ключ выглядит примерно так:
Git SSH Windows — пошаговое руководство
Настроим пошагово 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 .
Enter passphrase (empty for no passphrase): [Type a passphrase]
Enter same passphrase again: [Type passphrase again]
Добавление SSH-ключа в ssh-agent
Чтобы запустить ssh-агент введите следующую команду.
На экране отобразится похожая строка.
Agent pid 31724
Добавим свой закрытый ключ SSH в ssh-agent . Если вы создали свой ключ с другим именем (или добавляете существующий ключ с другим именем), замените в команде id_rsa на имя вашего файла закрытого (приватного) ключа.
Ключ будет успешно добавлен в ssh-агент .
Добавление ключа SSH в учетную запись GitHub
Мы сгенерировали у себя на компьютере закрытый ключ SSH и добавили его в ssh-агент . Теперь нам необходимо добавить SSH ключ в учетную запись GitHub.
Сейчас нам необходимо скопировать SSH ключ в буфер обмена.
Способов есть несколько, но я же вам предлагаю следующее решения для Windows 10: введите команду ниже.
Прямо в терминале вы увидите содержимое необходимого файла с ключем. Скопируйте его в буфер.
Теперь зайдите на вашу страницу GitHub » Settings .
Перейдите во вкладку SSH and GPG keys и нажмите на кнопку New SSH key для добавления SSH ключа в вашу учетную запись GitHub.
В поле Title добавьте заголок для данного ключа. Например, если вы захотите настроить SSH доступ на нескольких устройствах, то вы будите понимать какой ключ принадлежит какому устройству.
В поле Key добавьте свой ssh-ключ, который вы скопировали в буфер обмена на предыдущем шаге.
Нажмите Add SSH key .
Для подтверждения вам потребуется ввести свой пароль от учетной записи GitHub .
На этом настройка SSH для вашего устройства завершена, теперь вы можете работать с git без ввода пароля от своей учетной записи.
Если вам понравилась данная статья, можете прочитать как настроить моментальную загрузку сайта на хостинг и синхронизацию файлов.
Надеюсь, вам понравилась данная информация. Если вам интересна тема web-разработки, то можете следить за выходом новых статей в Telegram.
Generating a new SSH key and adding it to the ssh-agent
After you’ve checked for existing SSH keys, you can generate a new SSH key to use for authentication, then add it to the ssh-agent.
In this article
If you don’t already have an SSH key, you must generate a new SSH key. If you’re unsure whether you already have an SSH key, check for existing keys.
If you don’t want to reenter your passphrase every time you use your SSH key, you can add your key to the SSH agent, which manages your SSH keys and remembers your passphrase.
Generating a new SSH key
Open Terminal Terminal Git Bash .
Paste the text below, substituting in your GitHub email address.
Note: If you are using a legacy system that doesn’t support the Ed25519 algorithm, use:
When you’re prompted to «Enter a file in which to save the key,» press Enter. This accepts the default file location.
At the prompt, type a secure passphrase. For more information, see «Working with SSH key passphrases».
Adding your SSH key to the ssh-agent
Before adding a new SSH key to the ssh-agent to manage your keys, you should have checked for existing SSH keys and generated a new SSH key. When adding your SSH key to the agent, use the default macOS ssh-add command, and not an application installed by macports, homebrew, or some other external source.
Start the ssh-agent in the background.
If you’re using macOS Sierra 10.12.2 or later, you will need to modify your
/.ssh/config file to automatically load keys into the ssh-agent and store passphrases in your keychain.
First, check to see if your
/.ssh/config file exists in the default location.
If the file doesn’t exist, create the file.
/.ssh/config file, then modify the file, replacing
/.ssh/id_ed25519 if you are not using the default location and name for your id_ed25519 key.
Note: If you chose not to add a passphrase to your key, you should omit the UseKeychain line.
Add your SSH private key to the ssh-agent and store your passphrase in the keychain. If you created your key with a different name, or if you are adding an existing key that has a different name, replace id_ed25519 in the command with the name of your private key file.
Note: The -K option is Apple’s standard version of ssh-add , which stores the passphrase in your keychain for you when you add an ssh key to the ssh-agent. If you chose not to add a passphrase to your key, run the command without the -K option.
If you don’t have Apple’s standard version installed, you may receive an error. For more information on resolving this error, see «Error: ssh-add: illegal option — K.»
If you have GitHub Desktop installed, you can use it to clone repositories and not deal with SSH keys.
Ensure the ssh-agent is running. You can use the «Auto-launching the ssh-agent» instructions in «Working with SSH key passphrases», or start it manually:
Add your SSH private key to the ssh-agent. If you created your key with a different name, or if you are adding an existing key that has a different name, replace id_ed25519 in the command with the name of your private key file.
Start the ssh-agent in the background.
Add your SSH private key to the ssh-agent. If you created your key with a different name, or if you are adding an existing key that has a different name, replace id_ed25519 in the command with the name of your private key file.
Полезный блог
При любом сохранении данных из локального Git-репозитория в репозиторий на GitHub (например, при выполнении команды git push) сервер проводит аутентификацию пользователя, чтобы понять, кто именно к нему обращается. При этом можно каждый раз с клавиатуры вводить своё имя и пароль, под которыми мы регистрировались на GitHub, но гораздо удобнее один раз настроить аутентификацию по ключам SSH. После этого процедура проверки подлинности будет проходить незаметно для нас, никакие дополнительные пароли вводить не придётся.
Если вы работаете на GitHub только с одним профилем, то настроить аутентификацию по ключам SSH совсем несложно (далее мы подробно рассмотрим, как это делается). Но иногда бывает необходимо заходить в GitHub под разными пользователями (например, одна учётная запись для личных проектов, а другая – для рабочих). Как в этом случае избавиться от надоедливого ввода пароля при каждом сохранении изменений в удалённом репозитории?
В этой статье мы покажем, как настроить аутентификацию по SSH-ключам для работы с разными профилями на GitHub с одного и того же компьютера. Для этого необходимо сделать три шага:
1. Создать SSH-ключи и настроить доступ по ним к первой учётной записи на GitHub.
2. Создать SSH-ключи и настроить доступ по ним ко второй учётной записи на GitHub.
3. Настроить SSH на работу с разными ключами в зависимости от адреса GitHub-репозитория, к которому идёт обращение.
Шаг 1. Настраиваем доступ по SSH-ключам к первому профилю
SSH (Secure Shell) – это защищённый протокол для доступа к удалённым компьютерам, находящимся в сети. Подключившись к компьютеру по SSH, мы сможем работать в оболочке командной строки, запущенной на этом компьютере. Визуально это выглядит так, что мы работаем в окне терминала на своей машине, но по факту выполняем команды на другом компьютере, который физически может находиться на расстоянии тысяч километров от нас. Для проверки подлинности пользователя используются пары SSH-ключей:
— Закрытый ключ (private key) – это файл, который создаётся и хранится на локальном компьютере. Этот файл нельзя никому передавать, его содержимое ни в коем случае не должно попасть в чужие руки!
— Открытый ключ (public key) – это файл, генерируемый совместно с закрытым ключом, который можно свободно распространять.
Закрытый и открытый ключи соответствуют друг другу, как ключ и замок. Если информация зашифрована одним из этих ключей, то расшифровать её можно только с помощью другого ключа.
В случае с GitHub это работает так: закрытый ключ хранится на вашем компьютере, а содержимое открытого ключа регистрируется в вашем профиле на сервере GitHub . Когда серверу поступает запрос на изменение в репозитории, эти ключи сравниваются, и если они соответствуют друг другу, то аутентификация пользователя считается успешной.
Процесс настройки SSH-ключей выглядит практически одинаково для любой современной операционной системы (Windows 10, macOS, Linux), за исключением путей к домашнему каталогу пользователя. Мы будем работать в Windows 10, где путь к домашнему каталогу имеет вид C:\Users\имя_пользователя (этот путь хранится в переменной среды HOMEPATH).
Генерируем пару ключей на локальной машине
Сначала на своём компьютере сгенерируем пару из открытого и закрытого ключей. Для этого откроем стандартную командную строку Windows и выполним команду ssh-keygen (в устаревших версиях Windows данная команда может отсутствовать, в этом случае команду ssh-keygen нужно запустить в оболочке Git Bash, которая устанавливается на компьютер вместе с Git):
Здесь мы вводим имя файла, в котором будет сохранён новый ключ (файлы с SSH-ключами принято держать в директории .ssh в домашнем каталоге пользователя). По умолчанию предлагается имя id_rsa, мы оставим его, нажав .
Как видим, утилита ssh-keygen создала директорию .ssh в домашнем каталоге пользователя (в нашем случае это пользователь с именем andrv) и запрашивает дополнительное ключевое слово passphrase – это пароль для повышенной защиты SSH-ключей. Мы оставим его пустым, дважды нажав .
В результате в каталоге .ssh созданы два файла: id_rsa (закрытый ключ) и id_rsa.pub (открытый ключ):
Открытый ключ из файла id_rsa.pub мы должны зарегистрировать в своём профиле на GitHub. Посмотрим содержимое этого файла с помощью команды type:
Для того, чтобы записать публичный ключ на GitHub, нужно сохранить содержимое файла id_rsa.pub в буфере обмена. Для этого можно воспользоваться стандартной для Windows 10 утилитой clip, передавая ей в качестве входного потока нужный файл:
Другой вариант – открыть файл с ключом в Блокноте, выбрав его в Проводнике или выполнив команду notepad %HOMEPATH%\.ssh\id_rsa.pub, а там уже скопировать содержимое файла в буфер обмена.
Сохраняем открытый ключ в профиле на GitHub
Теперь содержимое файла id_rsa.pub, которое мы скопировали в буфер обмена, нужно сохранить в настройках своего профиля на GitHub.
Для этого зайдем на GitHub под своей учётной записью (в нашем примере это пользователь andpop), кликнем на треугольнике справа от своей аватарки в верхнем правом углу окна и в открывшемся списке выберем пункт Settings.
В открывшемся окне нужно выбрать пункт SSH and GPG keys:
Появится список SSH-ключей, которые мы регистрировали для нашей учётной записи ранее (их может быть несколько), и кнопка New SSH key для ввода нового ключа:
Для регистрации нового ключа нужно:
1. В поле Title ввести его название. Оно нужно только для информации о том, для какого компьютера вы добавили ключ, больше мы его нигде использовать не будем.
2. В поле Key вставить содержимое открытого ключа, который мы заранее сохранили в буфере обмена.
После нажатия кнопки Add SSH key GitHub может запросить ваш пароль для подтверждения регистрации нового ключа:
На этом настройка SSH-ключей для вашей первой учетной записи завершена, теперь изменения из локального репозитория будут сохраняться на GitHub без запроса имени и пароля пользователя.
Отметим, что при первом обращении к GitHub с использованием SSH-ключей в консоли вы получите такое сообщение:
Пугаться этого не стоит, дело в том, что при SSH-соединении не только сервер удостоверяется в подлинности клиента, но и клиент проверяет, знаком ли ему данный сервер, заходил ли он на него ранее. Поэтому при первом подключении к серверу GitHub нужно ответить yes, при этом уникальная комбинация символов, идентифицирующая сервер (RSA key fingerprint), сохранится на нашем компьютере, а сервер GitHub будет добавлен в список известных хостов. При всех последующих обращениях к GitHub этот вопрос задаваться не будет.
Шаг 2. Настраиваем ключи для второго профиля
Для второй учётной записи мы должны сгенерировать новую пару SSH-ключей. Для этого вновь воспользуемся командой ssh-keygen, указав другое имя файла для нового ключа (в нашем случае это id_rsa_work в той же директории .ssh домашнего каталога):
Теперь в каталоге %HOMEPATH%\.ssh у нас хранятся две пары SSH-ключей:
Новый публичный ключ, записанный в файле id_rsa_work.pub, нужно зарегистрировать в настройках второй нашей учётной записи на GitHub. Эта процедура полностью аналогична рассмотренной выше регистрации SSH-ключа из id_rsa_work.pub для первой учетной записи, поэтому подробно на ней мы останавливаться не будем.
Шаг 3. Настраиваем SSH на работу с двумя парами ключей
Итак, мы имеем две пары SSH-ключей для доступа к репозиториям двух пользователей GitHub:
— ключ id_rsa для личной учётной записи;
— ключ id_rsa_work для рабочей учётной записи.
Теперь в каталоге %HOMEPATH%\.ssh нужно создать конфигурационный файл с именем config и записать туда параметры подключения к серверу GitHub для каждого ключа:
По этим параметрам клиентский SSH-агент определит, какой именно ключ нужно использовать при обращении к ресурсам, адрес которых содержит тот или иной хост.
Чтобы понять этот механизм, посмотрим, в каком формате задаётся путь к GitHub-репозиторию при его клонировании на локальный компьютер по SSH. Зайдём, например, в репозиторий Finansist пользователя andpop, нажмём на зеленую кнопку Code и выберем вкладку SSH:
Как видим, при обращении к этому репозиторию по протоколу SSH будет использоваться следующий адрес: git@github.com:andpop/Finansist.git.
Таким образом, при доступе по SSH адрес GitHub-репозитория имеет такую структуру:
git@ хост :пользователь_GitHub / репозиторий .git
Если нам нужно работать с GitHub-репозиторием из первого профиля (пользователь andpop), то мы клонируем нужный репозиторий на локальный компьютер командой git clone, оставляя SSH-адрес без изменений:
При этом будет применен SSH-ключ id_rsa, заданный в конфигурационном файле %HOMEPATH%\.ssh\config для хоста github.com:
Если же нам нужен репозиторий из второго профиля (пользователь andpop-mrsu), то при клонировании нужно в адресе репозитория к имени хоста github.com добавить префикс -work:
В этом случае будет применен SSH-ключ id_rsa_work, заданный в конфигурационном файле %HOMEPATH%\.ssh\config для хоста github.com-work:
Отметим, что адрес GitHub-репозитория, с которым связан локальный репозиторий, можно посмотреть с помощью команды git remote get-url origin. При необходимости этот адрес можно изменить командой git remote set-url origin.
Например, мы при клонировании репозитория Finansist из профиля пользователя andpop-mrsu забыли добавить префикс -work:
Теперь при попытке «запушить» коммит в репозиторий пользователя andpop-mrsu будет применен не ключ id_rsa_work, а ключ id_rsa, который мы регистрировали для пользователя andpop. Возникнет ошибка:
В этом случае нужно изменить адрес GitHub-репозитория, указав в качестве хоста github.com-work:
После этого доступ к GitHub-репозиторию будет получен и команда git push отработает корректно.
Итак, мы научились работать по протоколу SSH с двумя разными GitHub-профилями – теперь вы можете с одного компьютера делать изменения в личных и рабочих репозиториях, не отвлекаясь на ввод имени и пароля при каждом обращении к GitHub.