SSH ключи: Полное руководство для начинающих

SSH (Secure Shell) является необходимым инструментом для безопасного подключения к удаленным серверам. Аутентификация на основе SSH-ключей предоставляет гораздо более надежную безопасность, чем использование пароля, что является обязательным знанием для всех разработчиков. В этой статье мы подробно и доступно объясним основные понятия генерации SSH-ключей и их фактическое использование для начинающих.


Почему необходимы SSH ключи?

Существующий метод с паролем подвержен рискам раскрытия на этапе ввода и уязвим для атак с подбором. SSH ключи решают эти проблемы, используя пару ключей: открытый ключ (Public Key) и закрытый ключ (Private Key).

  • Закрытый ключ (Private Key): хранится безопасно на компьютере пользователя и не должен раскрывать информацию. Для подключения к серверу необходимо иметь этот ключ.
  • Открытый ключ (Public Key): этот ключ регистрируется на сервере, к которому вы хотите подключиться. Его раскрытие не создает проблем безопасности.

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

Сцена, где SSH фея передает pub key


Как создать SSH ключ: команда ssh-keygen

Самая основная команда для генерации SSH ключей — это ssh-keygen. Откройте терминал и введите следующую команду.

ssh-keygen

После выполнения команды появится несколько вопросов. Давайте разберем их один за другим.

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

    • Вопрос о пути сохранения файла ключа. Если нет особых причин, лучше использовать путь по умолчанию .ssh/id_rsa. Просто нажмите Enter.

  2. Enter passphrase (empty for no passphrase):

    • Вопрос о том, хотите ли вы установить пароль для закрытого ключа. Рекомендуется обязательно установить пароль для повышения безопасности. Если вы установите пароль, даже если закрытый ключ будет украден, его нельзя будет использовать без пароля, что обеспечивает двойную безопасность. Обратите внимание, при вводе пароля ничего не отображается в терминале, поэтому будьте осторожны и нажмите Enter.

  3. Enter same passphrase again:

    • Подтверждение ранее введенного пароля.
    • Ожидаемый результат:

Your identification has been saved in /home/youruser/.ssh/id_rsa
Your public key has been saved in /home/youruser/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx youruser@yourmachine
The key's randomart image is:
+---[RSA 3072]----+
|        .=*o.    |
|       . +.E+    |
|      . o.=. .   |
|       o  . o    |
|      . S  .     |
|       . .       |
|        .        |
|                 |
|                 |
+----[SHA256]-----+

После завершения генерации ключа в директории ~/.ssh/ создаются два файла.

  • id_rsa: закрытый ключ (Private Key)
  • id_rsa.pub: открытый ключ (Public Key)

RSA vs. Ed25519: Какой метод выбрать?

При генерации SSH ключа вы можете указать способ шифрования ключа, используя опцию -t в команде ssh-keygen. Обычно используются два метода: RSA и Ed25519.

1. Метод RSA (-t rsa)

  • Метод, широко используемый с самого начала разработки SSH.
  • Его надежность проверена, и он совместим с большинством систем.
  • Вы можете указать длину ключа, обычно рекомендуется использовать 4096 бит.
    • Пример: ssh-keygen -t rsa -b 4096

2. Метод Ed25519 (-t ed25519)

  • Более современный метод шифрования, основанный на кривых Эллиптической кривой Curve25519.
  • Предоставляет аналогичный или даже более высокий уровень безопасности с меньшей длиной ключа по сравнению с RSA.
  • Процесс генерации ключа и аутентификации происходит быстро и требует меньше ресурсов.
  • Современные системы в основном поддерживают его, но на очень старых системах может не поддерживаться.
    • Пример: ssh-keygen -t ed25519

Рекомендуемый метод и причины

В настоящее время, если нет особых проблем совместимости, мы настоятельно рекомендуем использовать метод Ed25519.

  • Лучшая безопасность: даже с короткой длиной ключа обеспечивает надежную защиту от атак методом грубой силы.
  • Более высокая производительность: процесс генерации и аутентификации ключей более эффективен.
  • Простота: вы можете без проблем создавать ключи, не беспокоясь о длине ключа, как в случае с RSA.

Пример генерации ключа Ed25519

ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_my_server -C "my_server_ssh_key"
  • -t ed25519: создает ключ в формате Ed25519.
  • -f ~/.ssh/id_ed25519_my_server: задает имя файла ключа как id_ed25519_my_server. (Вы можете задать другое имя, чтобы отличить его от существующего id_rsa.)
  • -C "my_server_ssh_key": добавляет комментарий к ключу. Рекомендуется называть его, чтобы легко понять, для какой цели вы создаете ключ.

Ожидаемый результат:

Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase):  # Введите пароль (рекомендуется)
Enter same passphrase again:                # Повторите ввод пароля
Your identification has been saved in /home/youruser/.ssh/id_ed25519_my_server
Your public key has been saved in /home/youruser/.ssh/id_ed25519_my_server.pub
The key fingerprint is:
SHA256:yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy my_server_ssh_key
The key's randomart image is:
+--[ED25519 256]--+
|      .+=+       |
|     . oE B      |
|      o + O      |
|     . + +       |
|    o . S        |
|   . = .         |
|  . B +          |
| . * = o         |
|+ o . = .        |
+----[SHA256]-----+

Теперь вы, вероятно, понимаете основные методы создания и управления SSH-ключами. После генерации открытого ключа (id_ed25519_my_server.pub или id_rsa.pub) вам нужно зарегистрировать его в файле ~/.ssh/authorized_keys на удаленном сервере, чтобы безопасно подключиться без пароля. В следующей статье мы подробно рассмотрим, как зарегистрировать и использовать созданный SSH ключ на сервере.

Если у вас есть вопросы, не стесняйтесь задавать их в комментариях!