• DevOps
  • Создание SSH-ключей и их настройка

    Введение

    SSH-ключи используются для безопасной аутентификации без передачи пароля по сети.
    Проще говоря — это способ входить на сервер или подключаться к сервису (например GitHub) без ввода логина и пароля при каждом подключении.

    SSH-ключ — это пара файлов, которые создаются одновременно:

    1. Приватный ключ — ~/.ssh/id_ed25519
      • хранится только у владельца
      • никому не передаётся
      • используется для подписи соединения
    2. Публичный ключ — ~/.ssh/id_ed25519.pub
      • его можно безопасно передавать
      • добавляется в файл authorized_keys на сервере
      • добавляется в настройки SSH-ключей в GitHub

    В этой статье разберём:

    • как создавать SSH-ключи с паролем и без
    • как задавать собственное имя файла
    • как правильно настраивать файл ~/.ssh/config
    • как использовать ключи для подключения к VPS и GitHub
    • какие права должны быть у ключей

    Создание ключей

    Базовая команда

     1ssh-keygen -t ed25519 -a 200 -C "comment"
    

    Что означает эта команда:

    • ssh-keygen — утилита для генерации SSH-ключей
    • -t ed25519 — тип ключа (рекомендуемый современный алгоритм, быстрый и безопасный)
    • -a 200 — количество раундов KDF (усложняет перебор пароля, если он задан)
    • -C "comment" — комментарий к ключу, нужен только для удобства распознавания ключа (например: github_deploy)

    Что произойдёт после запуска:

    1. Система предложит указать путь для сохранения ключа:

       1Enter file in which to save the key (/home/user/.ssh/id_ed25519):
      

      Можно:

      • нажать Enter — будет использован путь по умолчанию
      • задать собственное имя ключа (например для Linux: ~/.ssh/key_name, для Windows C:\Users\user\.ssh\key_name)
    2. Затем система предложит задать passphrase (пароль к ключу):

       1 Enter passphrase (empty for no passphrase):
      

      Если ключ создаётся для автодеплоя или серверной автоматизации, пароль обычно не используется.
      В этом случае достаточно два раза нажать Enter.

    Команда с указанием имени файла

    В этом примере ключ создаётся с заранее заданным именем файла:

     1ssh-keygen -t ed25519 -a 200 -f key_name -C "comment"
    

    Важно: перед выполнением команды терминал уже должен находиться в директории .ssh.

    Linux:

     1cd ~/.ssh
    

    Windows (PowerShell):

     1cd $env:USERPROFILE\.ssh
    

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

    Создание конфига

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

    Расположение:

    • Linux: ~/.ssh/config
    • Windows: C:\Users\user\.ssh\config

    Если файла нет — его можно создать вручную.

    Для чего нужен

    Без файла config подключение выглядит так:

     1ssh -i ~/.ssh/staging [email protected] -p 22
    

    С config можно упростить до:

     1ssh staging
    

    Базовая структура

     1Host alias_name
     2    HostName 203.0.113.10
     3    User username
     4    IdentityFile ~/.ssh/key_name
     5    Port 22
     6    IdentitiesOnly yes
    

    Подключение к VPS

     1Host deploy
     2    HostName 203.0.113.10
     3    User deploy
     4    IdentityFile ~/.ssh/deploy
     5    IdentitiesOnly yes
     6
     7Host admin
     8    HostName 203.0.113.10
     9    User admin
    10    IdentityFile ~/.ssh/id_ed25519
    11    IdentitiesOnly yes
    

    Подключение:

     1ssh deploy
    

    или

     1ssh admin
    

    GitHub с конкретным ключом

     1Host github.com
     2    HostName github.com
     3    User git
     4    IdentityFile ~/.ssh/github_deploy
     5    IdentitiesOnly yes
    

    Использование:

     1git clone [email protected]:your-username/your-repository.git
    

    Два разных GitHub аккаунта

     1Host github-personal
     2    HostName github.com
     3    User git
     4    IdentityFile ~/.ssh/github_personal
     5    IdentitiesOnly yes
     6
     7Host github-work
     8    HostName github.com
     9    User git
    10    IdentityFile ~/.ssh/github_work
    11    IdentitiesOnly yes
    

    Использование:

     1git clone git@github-personal:your-username/your-repository.git
    

    или

     1git clone git@github-work:your-username/your-repository.git
    

    Права на директорию .ssh и файлы

    В Linux SSH требует строгих прав доступа к файлам.

     1chmod 700 ~/.ssh
     2chmod 600 ~/.ssh/key_name
     3chmod 644 ~/.ssh/key_name.pub
     4chmod 600 ~/.ssh/config
    
    • 700 — доступ только владельцу
    • 600 — приватный ключ и файл config не должны быть доступны другим пользователям
    • 644 — публичный ключ можно читать

    Если используется authorized_keys:

     1chmod 600 ~/.ssh/authorized_keys
    

    Windows обычно выставляет корректные права автоматически.

    Смотрите также