Поддержка ssh-ключей пользователя для «облачных серверов»

Новость одной строкой: мы реализовали возможность установки облачного сервера с автоматическим добавлением пользователю root публичного ключа в authorized_keys.

Ликбез: для чего нужны ssh-ключи?

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

В бытовом смысле это много удобнее, не говоря уже про автоматизацию удалённого выполнения команд.

Для Linux/FreeBSD и MacOS X ключ генерируется в консоли командой ssh-keygen (открытый ключ после этого можно скопировать из ~/.ssh/id_rsa.pub), для Windows в утилите PyTTY его так же можно сгенерировать и использовать — подробнее.

Минимальный метод использования — выбрать ключ при установке/переустановке:

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

Заметим, по-умолчанию машина ставится без ключа, но есть возможность указать, какой ключ использовать по-умолчанию.

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

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

А дальше начинаются нюансы.

Во-первых, в отличие от многих сервисов мы ключ полностью валидируем. И на этапе JS, и на серверной стороне. Что во-первых спасает от распространённой ошибки — загрузки приватного ключа вместо публичного, а во-вторых гарантирует, что ключ — это ключ.

Вот так вот выглядит удачно предовтращённое разглашение приватного ssh-ключа — мы его отвергаем ещё на уровне JS, до того, как отправляем на сервер, таким образом, не компрометируем:

Во-вторых мы записываем ключ установки в свойства виртуальной машины (поле «ключ при установке», рядом с паролем при установке).

Мы показываем его «хвостик» (описание), но если по нему кликнуть, покажем сам ключ целиком.

И, главное: мы проверяем, что ключ виртуальной машины пользователю известен. Если машина поставлена с ключом, который пользователь не добавлял в «свои» (такое может быть при передаче сервера с аккаунта на аккаунт) или пользователь ключ удалил, то мы показываем предупреждение.

Так как наш сервер API написан на Haskell, то под это дело наш старший программист потратил свой вечер и написал библиотеку: crypto-pubkey-openssh. Традиционно, мы подобные вещи выкладываем в open source.

Что еще почитать по теме

T-Rex 30 марта 2021

Что такое SMTP-протокол и как он устроен?

SMTP (Simple Mail Transfer Protocol) — протокол передачи почты. Он был представлен еще в 1982 году, но не теряет актуальности до сих пор. В статье разбираемся, какие задачи решает протокол и как он ра…
T-Rex 30 марта 2021
Владимир Туров 1 сентября 2020

Дело совершенно секретного iPod

Это был обычный серый день в конце 2005 года. Я сидел на рабочем месте и писал код для следующей версии iPod. Вдруг без стука ворвался директор ПО для iPod, начальник моего начальника, и закрыл дверь.
Владимир Туров 1 сентября 2020
T-Rex 21 августа 2020

TrendForce: цены на SSD упадут

Эксперты DRAMeXchange предсказывают значительное падение цен на оперативную память и твердотельные накопители в ближайшее время. Причина — сокращение спроса на чипы для NAND и DRAM.
T-Rex 21 августа 2020

Новое в блоге

Михаил Фомин 24 июня 2022

Docker Swarm VS Kubernetes — как бизнес выбирает оркестраторы

Рассказываем, для каких задач бизнесу больше подойдет Docker Swarm, а когда следует выбрать Kubernetes.
Михаил Фомин 24 июня 2022
Ульяна Малышева 30 сентября 2022

«Нулевой» локальный диск. Как мы запустили облако только с сетевыми дисками и приручили Ceph

Чем хороши сетевые диски и почему именно Ceph, рассказал директор по развитию ядра облачной платформы Иван Романько.
Ульяна Малышева 30 сентября 2022
Валентин Тимофеев 30 сентября 2022

Как проходит онбординг сотрудников ИТО? Что нужно, чтобы выйти на смену в дата-центр

Рассказываем, как обучаем новых сотрудников, какие задачи и испытания проходят инженеры прежде, чем выйти на свою первую смену.
Валентин Тимофеев 30 сентября 2022
T-Rex 28 сентября 2022

Книги по SQL: что почитать новичкам и специалистам

Собрали 6 книг, которые помогут на старте изучения SQL и при углублении в тему.
T-Rex 28 сентября 2022