Чем заменить OpenSSH на слабых устройствах и роутерах
Когда вы собираете минималистичный образ для микроконтроллера, роутера или Docker-контейнера, каждый мегабайт памяти превращается в роскошь. Полноценный OpenSSH отлично работает на серверах, но для встраиваемых систем он выглядит как грузовик, приехавший за покупками в продуктовый павильон. За ним тянется хвост из зависимостей, а оперативная память тает буквально на глазах.
В таких ситуациях вспоминают про Dropbear. Это компактный SSH-сервер и клиент, написанный Мэттом Джонстоном. Проект появился более двадцати лет назад, но до сих пор активно поддерживается и служит стандартом по умолчанию в OpenWrt и прошивках для сетевого оборудования.
Что внутри и за счет чего достигается экономия
Dropbear решает одну конкретную задачу: экономно расходовать место на диске и в оперативке, сохраняя при этом базовую безопасность протокола SSH-2. Если откомпилировать проект с нужными флагами, итоговый бинарник займет всего пару сотен килобайт.
Разработчик применил концепцию единого исполняемого файла (multi-purpose binary), аналогично тому, как устроена утилита BusyBox. В этом режиме один файл отвечает за функции сервера, клиента dbclient, генератора ключей dropbearkey и конвертера dropbearconvert. Вы создаете символические ссылки с нужными именами на один бинарник, а программа определяет режим работы по имени вызванного файла.
Вот еще пара приемов для снижения объема:
- Встроенный клиент
scpпо умолчанию собирается без полосы прогресса передачи файлов. Если вам нужен индикатор, придется явно передать параметрSCPPROGRESS=1при сборке. - В файле
options.hможно вручную отключить неиспользуемые алгоритмы шифрования, проброс портов или поддержку авторизации по паролю, еще сильнее урезав размер итогового файла.
Нюансы работы с ключами
Если вы привыкли к стандартному инструментарию OpenSSH, проект преподнесет несколько сюрпризов. На стороне сервера все привычно: файл ~/.ssh/authorized_keys работает стандартным образом. Вы добавляете туда публичные ключи формата ssh-rsa или ssh-ed25519. Главное, чтобы редактор не разбил строку ключа на несколько частей, а права на папку .ssh разрешали запись только владельцу.
Со стороны клиента и при генерации ключей хоста начинаются особенности. Утилита использует собственный формат приватных ключей. Чтобы применить привычный ключ ~/.ssh/id_rsa в клиенте dbclient, его придется предварительно конвертировать:
dropbearconvert openssh dropbear ~/.ssh/id_rsa ~/.ssh/id_rsa.db
dbclient -i ~/.ssh/id_rsa.db user@remotehost
Если вы создаете новый ключ через родную утилиту dropbearkey, приватная и публичная части выводятся прямо в консоль. Вытащить публичный ключ для добавления на другой сервер можно обычной фильтрацией:
./dropbearkey -y -f ~/.ssh/id_ed25519 | grep "^ssh-" > ~/.ssh/id_ed25519.pub
Запуск сервера и подводные камни
Обычно перед запуском SSH-сервера требуется вручную сгенерировать ключи хоста:
./dropbearkey -t rsa -f dropbear_rsa_host_key
./dropbearkey -t ed25519 -f dropbear_ed25519_host_key
В Dropbear есть удобный хак для быстрой загрузки систем. Вместо генерации ключей во время старта (что замедляет запуск на слабых процессорах), серверу передают флаг -R. В этом случае ключи автоматически создадутся в каталоге /etc/dropbear/ только при первом входящем подключении.
При эксплуатации стоит учитывать особенности проекта:
- Запуск сервера от обычного пользователя сильно ограничен. Не получится выделить псевдотерминал (pty), зайти под другим аккаунтом или использовать shadow-пароли.
- Зашифрованные паролем хостовые ключи не поддерживаются напрямую, хотя клиент умеет подключаться к запущенному
ssh-agent. - Подробной документации у проекта нет. Основные инструкции разбросаны по текстовым файлам
INSTALL.md,MULTI.mdиSMALL.mdв корне репозитория.
Кому пригодится этот инструмент
Dropbear выручит, если вы делаете собственную прошивку для роутера, разрабатываете устройство на базе Linux с ограниченным объемом flash-памяти или собираете компактный образ для initramfs. На полноценном сервере с десятками гигабайт памяти вы вряд ли заметите разницу с OpenSSH. Но там, где счет идет на килобайты, этот инструмент экономит ресурсы лучше большинства аналогов.
