/ SSH

Как сгенерировать свой SSH-ключ на Linux/MacOS/Windows

В этой статье я показал, как сгенерировать валидный ssh-ключ для любой ОС. Так же, кратко объяснил, как работать с этим ключом, какой ключ добавлять на сервер, и рассказал о некоторых нюансах генерации ключей, которые могут возникать у пользователей Windows.

Генерация SSH-ключа на Linux/MacOS

В системах Linux/MacOS уже встроена утилита ssh-keygen, которая позволяет из коробки сгенерировать пары SSH-ключей. Выполнив команду ssh-keygen из консоли компьютера, будет создан 2048-битный RSA-пара ключей, которую вы можете использовать для своих задач.

При вызове, эта утилита попросит вас указать путь, по которому эти ключи будут храниться. По умолчанию ключи сохраняются по пути ~/.ssh. При генерации ключей, создаётся 2 файла id_rsa (приватный ключ), и id_rsa.pub (публичный ключ). Если вы будете использовать путь по умолчанию, как предлагает ssh-keygen, то это позволит автоматически находить ваши SSH-ключи при аутентификации. Потому, я рекомендую принять все предложения, просто нажав ENTER.

Если в этой папке уже находятся ранее сгенерированные ключи, то вы получите сообщение с вопросом: перезаписать ли старые ключи новыми

/home/username/.ssh/id_rsa already exists.
Overwrite (y/n)?

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

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

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

После чего, пара ключей будет сгенерирована. И в указанной папке появится 2 фала (приватный и публичный ключи), которые вы теперь можете использовать для аутентификации.
keygenerated

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

Генерация SSH-ключа на Windows

К сожалению, windows не может похвастаться встроенными инструментами генерации SSH-ключей. Потому, для того, чтобы создать пару SSH-ключей на windows, нужно установить утилиту PuTTY. Эта утилита позволяет подключаться к удалённым серверам через SSH, а их дополнительная утилита PuTTYgen используется для генерации SSH-ключей на windows.

На сайте вам необходимо скачать .msi версию (в секции Package files), после чего запустить установку, следуя всем шагам установщика.

После того, как программа будет установлена, на вашем компьютере появится утилита PuTTYgen, найти которую вы можете либо в меню "пуск", либо нажав кнопку Windows и начать вводить её название: search

А чтобы сгенерировать ssh-ключ через putty, вам нужно запустите эту утилиту. Её интерфейс созданию ключа будет выглядеть подобным образом: interface

Вы можете кастомизировать настройки создания ключей (во вкладке Parameters), если хотите, но значения по умолчанию подходят для большинства всех случаев. Всё, что вам осталось - нажать на кнопку Generate, и рандомно подвигать мышкой ^^.
--------

Когда ключ будет сгенерирован, то вы увидите публичный ключ, отображаемый в текстовом поле. Скопируйте его в буфер обмена, и его можете добавить на любой сервер для аутентификации (DigitalOcean, GitHub, BitBucket, ...). Обязательно проскрольте всю текстовую область, чтобы скопировать ключ полностью.

Затем вам будет предложено ввести ключевую фразе для этого SSH-ключа. Его заполнение повышает безопасность, так как кто-то, кто захватит доступ к этому ключу, не сможет его использовать, не зная ключевую фразу. Вы должны будете указывать эту фразу каждый раз, когда будете использовать этот ключ (если вы не используете ПО агента SSH, которое хранит расшифрованный ключ). Но, я, обычно, оставляю его пустым, для удобства , плевал я на безопасность. ssh-generated

Когда вы закончите настройку, нажмите на кнопку Save private key и выберите безопасное место, куда вы сохраните его. Вы можете назвать свой ключ как угодно, а расширение .ppk будет добавлено ему автоматически.

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

Работа с форматом публичного ключа PuTTY

Вы также можете нажать на кнопку Save public key, но учтите: формат, который использует PuTTYGen, при сохранении публичного ключа, несовместим с файлами OpenSSH authorized_keys, используемыми для аутентификации ключа SSH на серверах Linux. Потому, у вас по незнанию этого нюанса может возникать ошибка при добавлении ключа, созданного через PuTTY.

Если вам нужно увидеть открытый ключ в правильном формате после того, как закрытый ключ был сохранен:

  • Откройте PuTTYgen.
  • Загрузите свой приватный ключ в утилиту, нажав на кнопку Load, и выбрав нужный файл ключа. load_key
  • Скопируйте публичный ключ из ранее известного поля. public_key

Генерация SSH-ключа на Windows с помощью Git Bash

Очень вероятно, что вы уже используете Git в своей системе. Потому, вам может даже не понадобиться установка PuTTY в свою систему. Ввиду того, что git bash является очень приближенной системой эмулирования Unix-подобных систем, там доступно большинство линуксовских команд. Потому, в этом случае, вы можете сгенерировать SSH ключ через GIT.

Потому, чтобы сгенерировать ключ в Windows, достаточно выполнить команду ssh-keygen, работа с которой была описана выше.
windows_git_bash

Резюме

В этой статье я показал, как сгенерировать ssh ключ на разный операционных системах: Windows, Linux, MacOS. Прочитав эту статью вы со стопроцентной уверенностью будете знать, как создать свой SSH ключ на любое ОС, с котороми будете работать. В этой статье показан подход, при котором генерируется общий ключ, который подойдёт под большинство случаев: ssh ключ для GitLab, GitHub, DigitalOcean.

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