Как сгенерировать свой SSH-ключ на Linux/MacOS/Windows
В этой статье я показал, как сгенерировать валидный ssh-ключ для любой ОС. Так же, кратко объяснил, как работать с этим ключом, какой ключ добавлять на сервер, и рассказал о некоторых нюансах генерации ключей, которые могут возникать у пользователей Windows.
- Создание ключа для Unix-подобных систем
- Создание ключа для Windows (с помощью Putty)
- Создание ключа для Windows (с помощью Git Bash)
Генерация 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 фала (приватный и публичный ключи), которые вы теперь можете использовать для аутентификации.
Если вы не очень часто пользуетесь SSH, вы наверное путаетесь в том, что такое публичный ключ, и приватный ключ, и какой из них нужно добавлять на сервер (к примеру в DigitalOcean, GitHub), чтобы работала аутентификация. Так вот, вы делитесь с другими серверами только публичным ключом. Приватный ключ всегда хранится только на вашем локальном компьютере, и вы не должны делиться с ним ни с кем.
Генерация SSH-ключа на Windows
К сожалению, windows не может похвастаться встроенными инструментами генерации SSH-ключей. Потому, для того, чтобы создать пару SSH-ключей на windows, нужно установить утилиту PuTTY. Эта утилита позволяет подключаться к удалённым серверам через SSH, а их дополнительная утилита PuTTYgen
используется для генерации SSH-ключей на windows.
На сайте вам необходимо скачать .msi
версию (в секции Package files
), после чего запустить установку, следуя всем шагам установщика.
После того, как программа будет установлена, на вашем компьютере появится утилита PuTTYgen
, найти которую вы можете либо в меню "пуск", либо нажав кнопку Windows
и начать вводить её название:
А чтобы сгенерировать ssh-ключ через putty, вам нужно запустите эту утилиту. Её интерфейс созданию ключа будет выглядеть подобным образом:
Вы можете кастомизировать настройки создания ключей (во вкладке Parameters
), если хотите, но значения по умолчанию подходят для большинства всех случаев. Всё, что вам осталось - нажать на кнопку Generate
, и рандомно подвигать мышкой ^^.
Когда ключ будет сгенерирован, то вы увидите публичный ключ, отображаемый в текстовом поле. Скопируйте его в буфер обмена, и его можете добавить на любой сервер для аутентификации (DigitalOcean, GitHub, BitBucket, ...). Обязательно проскрольте всю текстовую область, чтобы скопировать ключ полностью.
Затем вам будет предложено ввести ключевую фразе для этого SSH-ключа. Его заполнение повышает безопасность, так как кто-то, кто захватит доступ к этому ключу, не сможет его использовать, не зная ключевую фразу. Вы должны будете указывать эту фразу каждый раз, когда будете использовать этот ключ (если вы не используете ПО агента SSH, которое хранит расшифрованный ключ). Но, я, обычно, оставляю его пустым, для удобства , плевал я на безопасность.
Когда вы закончите настройку, нажмите на кнопку Save private key
и выберите безопасное место, куда вы сохраните его. Вы можете назвать свой ключ как угодно, а расширение .ppk
будет добавлено ему автоматически.
Если вы не ввели ключевую фразу, то вас попросят подтвердить, что вы действительно хотите сохранить ключ неё. Если вы согласны с этим, нажмите ENTER
, чтобы продолжить.
Работа с форматом публичного ключа PuTTY
Вы также можете нажать на кнопку Save public key
, но учтите: формат, который использует PuTTYGen, при сохранении публичного ключа, несовместим с файлами OpenSSH authorized_keys
, используемыми для аутентификации ключа SSH на серверах Linux. Потому, у вас по незнанию этого нюанса может возникать ошибка при добавлении ключа, созданного через PuTTY.
Если вам нужно увидеть открытый ключ в правильном формате после того, как закрытый ключ был сохранен:
- Откройте PuTTYgen.
- Загрузите свой приватный ключ в утилиту, нажав на кнопку
Load
, и выбрав нужный файл ключа. - Скопируйте публичный ключ из ранее известного поля.
Генерация SSH-ключа на Windows с помощью Git Bash
Очень вероятно, что вы уже используете Git в своей системе. Потому, вам может даже не понадобиться установка PuTTY
в свою систему. Ввиду того, что git bash
является очень приближенной системой эмулирования Unix-подобных систем, там доступно большинство линуксовских команд. Потому, в этом случае, вы можете сгенерировать SSH ключ через GIT.
Потому, чтобы сгенерировать ключ в Windows, достаточно выполнить команду ssh-keygen
, работа с которой была описана выше.
Резюме
В этой статье я показал, как сгенерировать ssh ключ на разный операционных системах: Windows, Linux, MacOS. Прочитав эту статью вы со стопроцентной уверенностью будете знать, как создать свой SSH ключ на любое ОС, с котороми будете работать. В этой статье показан подход, при котором генерируется общий ключ, который подойдёт под большинство случаев: ssh ключ для GitLab, GitHub, DigitalOcean.
Последнее, что вам останется - скопировать публичный ключ, и добавить его на сервер, с котором будете работать.