# Создание нового ключа SSH и его добавление в ssh-agent

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

## Сведения о парольных фразах ключа SSH

Доступ к данным и запись в репозиториях можно получить в GitHub с помощью SSH (протокол Secure Shell). При подключении через SSH проверка подлинности выполняется с помощью файла закрытого ключа на локальном компьютере. Для получения дополнительной информации см. [Сведения о протоколе SSH](/ru/authentication/connecting-to-github-with-ssh/about-ssh).

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

Если у вас еще нет ключа SSH, необходимо создать новый ключ SSH для проверки подлинности. Если вы не уверены, есть ли у вас ключ SSH, можно проверить наличие существующих ключей. Дополнительные сведения см. в разделе [Проверка наличия существующих ключей SSH](/ru/authentication/connecting-to-github-with-ssh/checking-for-existing-ssh-keys).

Если вы хотите использовать аппаратный ключ безопасности для аутентификации GitHub, вам необходимо сгенерировать новый SSH-ключ для вашего аппаратного ключа безопасности. При проверке подлинности с помощью пары ключей необходимо подключить аппаратный ключ безопасности к компьютеру. Дополнительные сведения см. в [заметках о выпуске OpenSSH 8.2](https://www.openssh.com/txt/release-8.2).

## Создание нового ключа SSH

Вы можете создать новый ключ SSH на локальном компьютере. После генерации ключа можно добавить публичный ключ в аккаунт GitHub.com , чтобы включить аутентификацию операций с Git через SSH.

> \[!NOTE]
> GitHub улучшил безопасность, убрав старые небезопасные типы ключей 15 марта 2022 года.
>
> По состоянию на эту дату ключи DSA (`ssh-dss`) больше не поддерживаются. Невозможно добавить новые ключи DSA в личная учетная запись на GitHub.
>
> Ключи RSA (`ssh-rsa`) с `valid_after` до 2 ноября 2021 г. могут продолжать использовать любой алгоритм подписи. Ключи RSA, созданные после этой даты, должны использовать алгоритм подписи SHA-2. Для использования сигнатур SHA-2 может потребоваться обновить некоторые старые клиенты.

1. Откройте <span class="platform-mac">Терминал</span><span class="platform-linux">Терминал</span><span class="platform-windows">GIT Bash</span>.

2. Вставьте текст ниже, заменив указанный в примере GitHub адрес электронной почты.

   ```shell
   ssh-keygen -t ed25519 -C "your_email@example.com"
   ```

   > \[!NOTE]
   > Если вы используете устаревшую систему, которая не поддерживает алгоритм Ed25519, используйте следующую команду:
   >
   > ```shell
   > ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
   > ```

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

   ```shell
   > Generating public/private ALGORITHM key pair.
   ```

   Когда появится запрос "Ввести файл, в котором сохранить ключ", можно нажать клавишу **ВВОД** , чтобы принять расположение файла по умолчанию. Обратите внимание, что если вы создали ключи SSH ранее, ssh-keygen может попросить переписать другой ключ, в этом случае рекомендуется создать пользовательский ключ SSH. Для этого введите расположение файла по умолчанию и замените id\_ALGORITHM на имя пользовательского ключа.

   <div class="ghd-tool mac">

   ```shell
   > Enter a file in which to save the key (/Users/YOU/.ssh/id_ALGORITHM): [Press enter]
   ```

   </div>

   <div class="ghd-tool windows">

   ```powershell
   > Enter file in which to save the key (/c/Users/YOU/.ssh/id_ALGORITHM):[Press enter]
   ```

   </div>

   <div class="ghd-tool linux">

   ```shell
   > Enter a file in which to save the key (/home/YOU/.ssh/id_ALGORITHM):[Press enter]
   ```

   </div>

3. В командной строке введите безопасную парольную фразу. Дополнительные сведения см. в разделе [Работа с парольными фразами ключа SSH](/ru/authentication/connecting-to-github-with-ssh/working-with-ssh-key-passphrases).

   ```shell
   > Enter passphrase (empty for no passphrase): [Type a passphrase]
   > Enter same passphrase again: [Type passphrase again]
   ```

## Добавление ключа SSH в ssh-agent

Перед добавлением нового ключа SSH в ssh-agent для управления ключами необходимо проверить наличие существующих ключей SSH и создать новый ключ SSH. <span class="platform-mac">При добавлении ключа SSH в агент используйте команду macOS `ssh-add` по умолчанию, а не приложение, установленное [macports](https://www.macports.org/), [homebrew](https://brew.sh/) или другим внешним источником.</span>

<div class="ghd-tool mac">

1. Запустите агент SSH в фоновом режиме.

   ```shell
   $ eval "$(ssh-agent -s)"
   > Agent pid 59566
   ```

   В зависимости от среды может потребоваться использовать другую команду. Например, вам может потребоваться доступ с правами root, для чего необходимо выполнить `sudo -s -H` перед запуском агента SSH. Может также потребоваться использовать `exec ssh-agent bash`или `exec ssh-agent zsh` для запуска агента SSH.

2. Если вы используете macOS Sierra 10.12.2 или более поздней версии, необходимо внести изменения в файл `~/.ssh/config`, чтобы автоматически загружать ключи в ssh-agent и хранить парольные фразы в цепочке ключей.

   * Сначала проверьте, существует ли файл `~/.ssh/config` в расположении по умолчанию.

     ```shell
     $ open ~/.ssh/config
     > The file /Users/YOU/.ssh/config does not exist.
     ```

   * Если файл не существует, создайте файл.

     ```shell
     touch ~/.ssh/config
     ```

   * Откройте файл `~/.ssh/config`, а затем внесите в него изменения, чтобы он содержал следующие строки. Если файл ключа SSH имеет другое имя или путь, отличный от примера кода, измените имя файла или путь в соответствии с текущей настройкой.

     ```text copy
     Host github.com
       AddKeysToAgent yes
       UseKeychain yes
       IdentityFile ~/.ssh/id_ed25519
     ```

     > \[!NOTE]
     >
     > * Если вы решили не добавлять парольную фразу к ключу, следует опустить строку `UseKeychain`.
     > * Если появится сообщение об ошибке `Bad configuration option: usekeychain`, добавьте дополнительную строку в раздел конфигурации `Host *.github.com`.
     >
     > ```text copy
     > Host github.com
     >   IgnoreUnknown UseKeychain
     > ```

3. Добавьте закрытый ключ SSH в ssh-agent и сохраните парольную фразу в цепочке ключей. Если вы создали ключ с другим именем или добавляете существующий ключ с другим именем, замените *id\_ed25519* в команде именем файла закрытого ключа.

   ```shell
   ssh-add --apple-use-keychain ~/.ssh/id_ed25519
   ```

   > \[!NOTE]
   > Параметр `--apple-use-keychain` сохраняет парольную фразу в цепочке ключей при добавлении ключа SSH в агент SSH. Если вы решили не добавлять парольную фразу в ключ, выполните команду без параметра `--apple-use-keychain`.
   >
   > Вариант `--apple-use-keychain` находится в стандартной версии `ssh-add`Apple. В версиях macOS до Монтерей (12.0) `--apple-use-keychain` и `--apple-load-keychain` флаги использовали синтаксис `-K` и `-A`соответственно.
   >
   > Если у вас нет стандартной `ssh-add` версии Apple, может появиться сообщение об ошибке. Дополнительные сведения см. в разделе [Ошибка: ssh-add: недопустимый параметр - apple-use-keychain](/ru/authentication/troubleshooting-ssh/error-ssh-add-illegal-option----apple-use-keychain).
   >
   > Если вы продолжаете запрашивать парольную фразу, может потребоваться добавить команду в `~/.zshrc` файл (или `~/.bashrc` файл для bash).

4. Добавьте открытый ключ SSH в учетную запись на GitHub. Дополнительные сведения см. в разделе [Добавление нового SSH-ключа в ваш аккаунт GitHub](/ru/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account).

</div>

<div class="ghd-tool windows">

Если у вас установлено приложение [GitHub Desktop](https://desktop.github.com/), его можно использовать для клонирования репозиториев, не прибегая к ключам SSH.

1. *В окне PowerShell с* повышенными привилегиями администратора убедитесь, что агент ssh запущен. Инструкции ssh-agent можно использовать в [Работа с парольными фразами ключа SSH](/ru/authentication/connecting-to-github-with-ssh/working-with-ssh-key-passphrases) или запустить вручную:

   ```powershell
   # start the ssh-agent in the background
   Get-Service -Name ssh-agent | Set-Service -StartupType Manual
   Start-Service ssh-agent
   ```

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

   ```powershell
   ssh-add c:/Users/YOU/.ssh/id_ed25519
   ```

3. Добавьте открытый ключ SSH в учетную запись на GitHub. Дополнительные сведения см. в разделе [Добавление нового SSH-ключа в ваш аккаунт GitHub](/ru/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account).

> ### Устранение конфликтов SSH-агентов в Windows
>
> В Windows средах собственная реализация OpenSSH Windows и одна из них, включенная в [Git для Windows](https://gitforwindows.org/) (на основе MSYS2/Bash), может сосуществовать.
>
> Если вы настроите и сохраняете пароль в агенте Windows с помощью PowerShell, Git всё равно может запрашивать пароль во время операций вроде `git push`. Это может происходить, когда Git for Windows использует свой включённый `ssh.exe` (из MSYS2) вместо клиента OpenSSH Windows системы, и поэтому не может общаться с сервисом Windows `ssh-agent`.
>
> Чтобы убедиться, что Git использует агент, в котором вы храните учетные данные, заставьте Git использовать SSH-бинарный файл системы, запустив:
>
> ```powershell
> git config --global core.sshCommand "C:/Windows/System32/OpenSSH/ssh.exe"
> ```
>
> Возможно, необходимо указать, какой `ssh-keygen` двоичный Git следует использовать, чтобы избежать конфликтов с двоичным файлом, упакованным с Git для Windows. Чтобы определить, какой двоичный файл используется, выполните следующую команду:
>
> ```powershell
> git config --global gpg.ssh.program "C:/Windows/System32/OpenSSH/ssh-keygen.exe"
> ```
>
> Кроме того, можно переустановить Git для Windows и выбрать параметр **Use external OpenSSH** во время установки.

</div>

<div class="ghd-tool linux">

1. Запустите агент SSH в фоновом режиме.

   ```shell
   $ eval "$(ssh-agent -s)"
   > Agent pid 59566
   ```

   В зависимости от среды может потребоваться использовать другую команду. Например, вам может потребоваться доступ с правами root, для чего необходимо выполнить `sudo -s -H` перед запуском агента SSH. Может также потребоваться использовать `exec ssh-agent bash`или `exec ssh-agent zsh` для запуска агента SSH.

2. Добавьте закрытый ключ SSH в ssh-agent.

   Если вы создали ключ с другим именем или добавляете существующий ключ с другим именем, замените *id\_ed25519* в команде именем файла закрытого ключа.

   ```shell
   ssh-add ~/.ssh/id_ed25519
   ```

3. Добавьте открытый ключ SSH в учетную запись на GitHub. Дополнительные сведения см. в разделе [Добавление нового SSH-ключа в ваш аккаунт GitHub](/ru/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account).

</div>

## Создание нового ключа SSH для аппаратного ключа безопасности

В macOS или Linux перед созданием нового ключа SSH может потребоваться обновить клиент SSH или установить новый клиент SSH. Дополнительные сведения см. в разделе [Ошибка: неизвестный тип ключа](/ru/authentication/troubleshooting-ssh/error-unknown-key-type).

1. Вставьте аппаратный ключ безопасности в компьютер.

2. Откройте <span class="platform-mac">Терминал</span><span class="platform-linux">Терминал</span><span class="platform-windows">GIT Bash</span>.

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

   <div class="ghd-tool mac">

   ```shell
   ssh-keygen -t ed25519-sk -C "your_email@example.com"
   ```

   </div>

   <div class="ghd-tool windows">

   ```powershell
   ssh-keygen -t ed25519-sk -C "your_email@example.com"
   ```

   </div>

   <div class="ghd-tool linux">

   ```shell
   ssh-keygen -t ed25519-sk -C "your_email@example.com"
   ```

   </div>

   > \[!NOTE]
   > Если команда завершается ошибкой `invalid format` , или `feature not supported,` вы можете использовать аппаратный ключ безопасности, который не поддерживает алгоритм Ed25519. Введите приведенную ниже команду.
   >
   > ```shell
   > ssh-keygen -t ecdsa-sk -C "your_email@example.com"
   > ```

4. При появлении соответствующего запроса нажмите кнопку на аппаратном ключе безопасности.

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

   <div class="ghd-tool mac">

   ```shell
   > Enter a file in which to save the key (/Users/YOU/.ssh/id_ed25519_sk): [Press enter]
   ```

   </div>

   <div class="ghd-tool windows">

   ```shell
   > Enter a file in which to save the key (c:\Users\YOU\.ssh\id_ed25519_sk):[Press enter]
   ```

   </div>

   <div class="ghd-tool linux">

   ```shell
   > Enter a file in which to save the key (/home/YOU/.ssh/id_ed25519_sk):[Press enter]
   ```

   </div>

6. При появлении соответствующего запроса введите парольную фразу и нажмите клавишу **ВВОД**.

   ```shell
   > Enter passphrase (empty for no passphrase): [Type a passphrase]
   > Enter same passphrase again: [Type passphrase again]
   ```

7. Добавьте открытый ключ SSH в учетную запись на GitHub. Дополнительные сведения см. в разделе [Добавление нового SSH-ключа в ваш аккаунт GitHub](/ru/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account).

## Дополнительные материалы

* [автозаголовок](/ru/organizations/managing-programmatic-access-to-your-organization/github-credential-types)