Работа с ssh-ключами
Что такое ssh-ключ
Как следует из названия — это ключ для ssh, т.е. используется программой ssh (или другим ssh-клиентом, в дальнейшем так и будем говорить:
ssh-клиент) для авторизации на удаленном сервере через демон/сервис sshd (будем называть этот сервер
ssh-сервером)
Если вы попали на эту страницу, значит в дальнейшем Вы таким способом будете (или от Вас требуют) авторизоваться (т.е. доказать, что это именно Вы) на каком-то unix-подобном сервере.
Это может быть нужно:
Важно то, что для всего этого достаточно одного ключа,
не требуется каждый раз создавать новый ключ.
Еще одним важным свойством является то, что ключ состоит из двух частей:
- публичная часть ключа (или публичный ключ)
- приватная/закрытая часть ключа (или закрытый ключ)
Устройство их аналогично устройству замка (что надо открыть) и железного ключа (то, чем открывают).
Публичная часть — это замок, а приватная часть — это Ваш личный ключ. Именно публичная часть используется сервером для Вашей авторизации (сможете ли Вы открыть ключом шкатулку или нет).
Не компрометируйте свою закрытую часть ключа, что может произойти при:
- передаче другому лицу (по аналогии: с железного ключа можно снять восковой отпечаток и отдать ключ обратно, копий ключа уже будет сколько угодно)
- посылке по открытым каналам (аналогично, копию снять ничего не стоит)
- и других обстоятельствах, когда доступ к закрытому ключу могут получить третьи лица
Чем это лучше использования пароля
Если Вы привыкли использовать системы с паролем, у Вас может возникнуть вопрос, почему администраторы сервера рекомендуют/заставляют Вас пользоваться ssh-ключами. Для этого я и написал этот раздел.
Мало кто может придумать сложный пароль и поэтому всегда есть опасности:
- простой пароль могут подобрать
- сложный пароль пользователь может забыть
- пользователь может раскрыть свой сложный пароль путем записывания пароля в записной книжке, на столе и т.д.
В отличие от этого, для авторизации по ключу требуется некоторая подготовка:
- Пользователь создает (если ключей еще нет) открытый и закрытый ключи
- Открытый/публичный ключ копируется на удаленный ssh-сервер и кладется в специальный файл в директории того пользователя, в кого и надо залогиниться. Скорее всего будет использоваться файл ~/.ssh/authorized_keys.
И в дальнейшем при авторизации:
- ssh-клиент отправляет ssh-серверу свой публичный ключ (поэтому публичный ключ у Вас тоже должен быть).
- Сервер проверяет файл ~/.ssh/authorized_keys на наличие присланного ключа, если он в файле найден, ssh-сервер отправляет клиенту сообщение, зашифрованное публичным ключом (шкатулку закрытую на замок)
- Клиент должен расшифровать сообщение с помощью своего приватного ключа (открыть шкатулку), если приватный ключ защищен паролем, ssh-клиент попросит пользователя ввести пароль, чтобы сначала расшифровать сам ключ.
- Если сообщение расшифровано (обратно прислана открытая шкатулка), то правильность закрытого и открытого ключей считается подтвержденной и пользователю предоставляется доступ на сервер.
Как видно, преимущество ключей в том, что:
- для подбора надо не только подобрать очень большой открытый ключ (скажем при длине ключа в 2048 бит он сложнее пароля из 8 символов примерно в 10^500 раз), но и подобрать закрытую пару к подобранному открытому ключу (тоже очень сложная и дорогая задача)
- несколько пользователей могут логиниться под одним логином на удаленном сервере не обмениваясь общими секретами, иными словами:
- если требуется для работы групповой логин, то имея пользователей с разными ключами всегда можно определить тот набор из пользователей, которые смогут логиниться в данный момент времени под этим групповым логином
Как установить ssh-клиент
Если у Вас:
- *BSD (FreeBSD /NetBSD/OpenBSD):
- ssh-клиент уже есть в системе
- Mac OS X:
- ssh-клиент уже есть в системе
- дистрибутив GNU\Linux:
- Ubuntu/Debian: sudo apt-get install openssh-client в терминале. Или через центр приложений Ubuntu (как следует из названия, лишь в Ubuntu)
- в остальных дистрибутивах: читайте документацию по своей системе
- Windows:
Кстати PuTTY есть и под Unix-системы.
Как получить/создать ssh-ключ
- Установить ssh-клиент (если еще не установили). По поводу установки — смотри предыдущий раздел.
- Далее — зависимости от предпочтений:
Использование различных ключей в одном клиенте
Иногда пользователь хочет использовать несколько ключей, что может быть вызвано:
- так сложилось
- разграничением ключей по серверам (скажем, на особо секретные сервера можно заходить по ключу с паролем, а на менее секретные — безпарольным ключом)
- тем, что уже имеющийся ключ не подходит серверу (например BlueGene не принимает в данный момент ключи EDSA) и надо создать другой ключ.
Ничего страшного!
Если использовать программу ssh:
Если использовать программу putty: