You are here: Foswiki>Main Web>SShKeys (10 Oct 2014, RomanKondakov)Edit Attach

Работа с ssh-ключами

Что такое ssh-ключ

Как следует из названия — это ключ для ssh, т.е. используется программой ssh (или другим ssh-клиентом, в дальнейшем так и будем говорить: ssh-клиент) для авторизации на удаленном сервере через демон/сервис sshd (будем называть этот сервер ssh-сервером)

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

Это может быть нужно:

ALERT! Важно то, что для всего этого достаточно одного ключа, не требуется каждый раз создавать новый ключ.

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

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

ALERT! Не компрометируйте свою закрытую часть ключа, что может произойти при:
  • передаче другому лицу (по аналогии: с железного ключа можно снять восковой отпечаток и отдать ключ обратно, копий ключа уже будет сколько угодно), примеры:
    • хранение на флешке ключа и передача флешки (даже на время) других людям (чтобы они на нее сохранили что-нибудь, например)
    • подключение флешки в сторонний компьютер
    • хранение ключа на компьютере в классе (администратор класса может получить к нему доступ)
    • хранение ключа в почте (аналогично: может получить доступ администратор почтового сервера)
  • посылке по открытым каналам (аналогично, копию снять ничего не стоит), пример:
    • посылка по почте (даже себе)
  • и других обстоятельствах, когда доступ к закрытому ключу могут получить третьи лица
Более подробно о защите ssh-ключа

Чем это лучше использования пароля

Если Вы привыкли использовать системы с паролем, у Вас может возникнуть вопрос, почему администраторы сервера рекомендуют/заставляют Вас пользоваться ssh-ключами. Для этого я и написал этот раздел.

Мало кто может придумать сложный пароль и поэтому всегда есть опасности:
  • простой пароль могут подобрать;
  • сложный пароль пользователь может забыть;
  • пароль пользователя может перехватить программа-шпион;
  • пользователь может раскрыть свой сложный пароль путем записывания пароля в записной книжке, на столе и т.д.

В отличие от этого, для авторизации по ключу требуется некоторая подготовка:
  • Пользователь создает (если ключей еще нет) открытый и закрытый ключи
  • Открытый/публичный ключ копируется на удаленный ssh-сервер и кладется в специальный файл в директории того пользователя, в кого и надо залогиниться. Скорее всего будет использоваться файл ~/.ssh/authorized_keys.

И в дальнейшем при авторизации:
  • ssh-клиент отправляет ssh-серверу свой публичный ключ (поэтому публичный ключ у Вас тоже должен быть).
  • Сервер проверяет файл ~/.ssh/authorized_keys на наличие присланного ключа, если он в файле найден, ssh-сервер отправляет клиенту сообщение, зашифрованное публичным ключом (шкатулку закрытую на замок)
  • Клиент должен расшифровать сообщение с помощью своего приватного ключа (открыть шкатулку), если приватный ключ защищен паролем, ssh-клиент попросит пользователя ввести пароль, чтобы сначала расшифровать сам ключ.
  • Если сообщение расшифровано (обратно прислана открытая шкатулка), то правильность закрытого и открытого ключей считается подтвержденной и пользователю предоставляется доступ на сервер.

Как видно, преимущество ключей в том, что:
  • для подбора надо не только подобрать очень большой открытый ключ (скажем при длине ключа в 2048 бит он сложнее пароля из 8 символов примерно в 10^500 раз), но и подобрать закрытую пару к подобранному открытому ключу (тоже очень сложная и дорогая задача)
  • несколько пользователей могут логиниться под одним логином на удаленном сервере не обмениваясь общими секретами, иными словами:
    • если требуется для работы групповой логин, то имея пользователей с разными ключами всегда можно определить тот набор из пользователей, которые смогут логиниться в данный момент времени под этим групповым логином

Как установить ssh-клиент

Если у Вас:

Кстати PuTTY есть и под Unix-системы.

Как создать ssh-ключ

  1. Установить ssh-клиент (если еще не установили). По поводу установки смотри предыдущий раздел.
  2. Далее — в зависимости от предпочтений:

Использование различных ключей в одном клиенте

Иногда пользователь хочет использовать несколько ключей, что может быть вызвано:
  • так сложилось
  • разграничением ключей по серверам (скажем, на особо секретные сервера можно заходить по ключу с паролем, а на менее секретные — безпарольным ключом)
  • тем, что уже имеющийся ключ не подходит серверу (например BlueGene не принимает в данный момент ключи ECDSA) и надо создать другой ключ.
Ничего страшного!

Если использовуете программу ssh: Если использовать программу putty:

Зачем нужен отпечаток (fingerprint) ключа

Для безопасности. Скорее всего Вы передаете свой открытый ssh-ключ (а закрытый ключ, как Вы помните, никому передавать нельзя) по незащищенному каналу, т.е.:
  • посылаете письмо с открытым ssh-ключом
  • вводите текст открытого ssh-ключа через форму на сайте (через браузер)
Во всех этих случаях теоретически можно подменить присланную информацию и в результате злоумышленник сможет выдать себя за Вас и с правами выданными для Вас войти в систему.

Для предотвращения подобной ситуации и используется передача отпечатка по защищенному каналу:
  • например через бумагу с подписью:
    • Вы распечатываете отпечаток на бумаге,
    • заверяете его своей подписью,
    • преподаватель заверяет Вашу подпись и все это передает нам
    • администратор проверяет подпись преподавателя (поскольку преподавателей сильно меньше студентов и меняются они реже, это довольно простая операция)
    • администратор берет отпечаток от присланного другим способом публичного ключа и сверяет с тем, что принесли на бумаге.
      • если все совпало, то помещает открытый ключ в Вашего пользователя
Проблема с передачей по защищенному каналу обычно в том, что большой объем данных передать довольно тяжело (скажем распечатать открытый ключ и потом набирать его с бумажного листа), поэтому в таких случаях и используется fingerprint.

Для получения отпечатка:
Topic revision: r6 - 10 Oct 2014, RomanKondakov
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Foswiki? Send feedback