SSH: генерация ключа

· Блог · 3 мин чтения

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

Что такое SSH и для чего нужны ключи?

SSH — это аббревиатура для Secure Shell, используется для удаленного управления Linux сервером (запускать консольный команды и т.д.).

По старинке вы можете постоянно указывать пароль при подключении к удаленному серверу, но это не безопасно, так как пароль может быть перехвачен. Для таких случаем были придумали публичные и приватный ключи — их можете сгенерировать используя ssh-keygen.

После генерации ключа вы получаете две версии — публичная и приватная.

  • Публичным ключом вы можете делиться с сервисами (например, Bitbucket, GitHib и др.), которые от вас их требует.
  • Приватный всегда остается у вас. Никогда не делитесь этим ключом, так как это тоже самое, что если бы я у вас спросил пароль от вашего VK аккаунта и если у кого-то он будет, то они могут зайти везде где вы используете публичный ключ. Допустим, если вы указали публичный ключ на Bitbucket, то используя ваш приватный ключ, я могу зайти по SSH и делать не очень приятный для вас вещи, по типу управления файлами вашего проекта и аккаунта. Я не думаю, что вы этого действительно хотите.

Подробнее о генерации ключей читайте ниже.

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

  • Откройте терминал
  • Впишите команду ниже, чтобы создать новый SSH ключ и «Мой ключ» как лейбл, чтобы в будущем вам было проще запомнить от чего этот ключ.
$ cd ~/.ssh && ssh-keygen -t rsa -b 4096 -C "Мой ключ"

Если у вас выдает ошибку, попробуйте сначала создать .ssh директорию следующей командой — mkdir ~/.ssh/ и потом снова повторить команду выше. Если ошибка все равно есть, опишите её в комментариях ниже, я постараюсь вам помочь.

  • Далее вам должно вывестись:
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/<ваш_пользователь>/.ssh/id_rsa):

    Где id_rsa — это стандартной название файла ключа, вы можете указать mykey.

  • На вопрос о «Enter passphrase (empty for no passphrase):» (с англ. введите фразу, оставьте пустым, если не хотите ничего указывать), нажмите Enter, чтобы пропустить этот этап, он не такой важный. У вас так же спросит о повторении «фразы», тут тоже нажмите Enter.
  • В конце у вас должно вывести, что-то похоже на это:
    Your identification has been saved in mykey.
    Your public key has been saved in mykey.pub.
    The key fingerprint is:
    d9:e7:33:6b:c1:46:11:3a:f6:ca:d3:5f:b7:47:39:11 Мой ключ
    The key's randomart image is:
    +--[ RSA 4096]----+
    |            ..   |
    |           ..    |
    |          +  ..  |
    |         + o.E . |
    |        S .oo   .|
    |         . =+  o.|
    |          +.=. .=|
    |           ..= .+|
    |           .. .o.|
    +-----------------+

    Это означает, что публичный (mykey.pub) и приватный ключ (mykey) были созданы.

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

Где хранятся ключи?

По умолчания для этого есть специальная скрытая папка .ssh, которую можно найти тут: /home/<ваш_пользователь>/.ssh/. Если ее нет, значит раньше вы еще не создавали ключи.

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

Тем самым, когда мы создаете новый ключ, лучше сначала перейти в .ssh директорию:

$ cd ~/.ssh

И уже потом генерировать ключи.

Как получить содержимое ключа через консоль?

Очень просто, используй команду cat для этого:

$ cat mykey.pub

Где mykey.pub — это название файла. Файл может быть почти любого формата.

Пример ответа будет следующий:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCr6XoQqS6ZfpHx3IweEoRQgV/9nCzkfdS5fdatzPQeOLcC/jdSFXu0ctbudbWzLWbUmrzCScnLXIdzuz7lDN7HLaSCbVnvmp+b4Xe2Y8EgiXzHwCqnDB7yQHxMo6KFqK3PDYHhwQu+wMo8ofXhfdiClvL6HHplDCR1/Rzs2UpmUJpPRRerOqghJP213DNj/ujH6CzuR96FfGOdrlT0uTqcREpUPOKYNsb+kp6WyC6z7IUDzYYEzwjdGngITGKVTC2iN+BCe2LYe2liNT2ZBsY+6CYTyPlW4Ok7ku8acDUSQy0U7Z0BpYaOmq1H1CYa4mVo/GG7xY2zgrZXz7nzdFJ1 mykey