Инструменты

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

Отпечатки SSH-ключей
Вставьте файлы .pub, authorized_keys или known_hosts и получите отпечатки SHA256 и MD5 ровно в том виде, в каком их печатает ssh-keygen -lf, сертификаты тоже. Хэшированные записи known_hosts можно сверить с названным вами хостом.
Проверка публичного SSH-ключа
Вставьте публичный ключ и получите алгоритм, настоящую длину, отпечаток SHA256 ровно в том виде, в каком его печатает ssh-keygen, и оценку от A до D с объяснением. Приватный ключ, вставленный по ошибке, не обрабатывается, а отклоняется.
Сборщик команды ssh-keygen
Выберите тип ключа, длину, комментарий и круги KDF, включая настройки аппаратного ключа, и получите точную команду ssh-keygen с объяснением каждого флага и блок для ~/.ssh/config. Парольную фразу он не спрашивает никогда.
Конвертер PPK в OpenSSH
Переведите закрытый ключ PuTTY .ppk в формат OpenSSH или ключ OpenSSH в .ppk для PuTTY, сохранив, сменив или сняв парольную фразу. Построен на разборе PPK, которым пользуется сам Conchshell, собранном в WebAssembly.
Проверка ~/.ssh/config
Вставьте свой конфиг и получите строки, которые стоит поправить: устаревшие шифры, MAC на MD5 и SHA-1, обмен ключами без curve25519, выключенная проверка ключа хоста и директивы, которые молча перебиты строкой выше. Заодно собирает исправленный конфиг.
Просмотр файла .rdp
Откройте файл .rdp и прочитайте каждую настройку простыми словами до того, как её применит Windows, — с предупреждениями про открытые диски, буфер обмена, смарт-карты, программы RemoteApp и шлюзы.

Почему они работают в браузере

Все шесть принимают то, к чему люди справедливо относятся осторожно. Файл конфигурации называет ваши хосты, ваших пользователей и ваши промежуточные машины; публичный ключ на то и публичный, но приходит из того же каталога, что и приватный; файл .ppk — это приватный ключ; файл .rdp может нести сохранённый пароль. Ничему из этого нечего делать на чужом сервере ради работы, которая локально занимает мгновение.

Поэтому ни одна страница инструментов никуда не отправляет вставленное и ни одна не несёт счётчиков. В скриптах остальных пяти нет ни fetch, ни XMLHttpRequest, ни отправки формы; единственный fetch конвертера — за его собственным файлом WebAssembly, при открытии страницы и до того, как вы что-нибудь вставили. Отказ от счётчиков стоит нам статистики по этим адресам, и оно того стоит: обещание проверяется за десять секунд с открытой вкладкой «Сеть», а не принимается на веру.

Как они проверены

Проверка ключа и отпечатки сверены с самим ssh-keygen. Для проверки ключа создаются пять настоящих типов ключей, и разрядность вместе с отпечатком SHA256 сравниваются с тем, что печатает ssh-keygen -lf. Для отпечатков — 50 файлов ключей всех типов, которые читает OpenSSH, включая сертификаты, плюс authorized_keys и хэшированный known_hosts: вывод SHA256 и MD5, рисунки и каждый поиск хоста совпадают с выводом самого ssh-keygen. Совпадение с внешним авторитетом — более сильная проверка, чем любое утверждение, написанное тем же человеком, что написал разбор.

Сборщик команды проверяется тем, что собранное запускается: для macOS и Linux каждый вариант ключа Ed25519, ECDSA и RSA, который он предлагает, прогнан через ssh-keygen 10.2 в песочнице, а получившийся ключ сверен по типу, длине, комментарию, парольной фразе и кругам KDF. Исключение — команды для аппаратных ключей: такой ключ без токена не создать, поэтому для них тест подтверждает только то, что ssh-keygen принимает все параметры. Просмотр .rdp проверен на файлах во всех кодировках, в которых пишет Windows, и на файле, собранном так, чтобы сработало каждое предупреждение.

Проверка конфига держится на правиле, которое легко сформулировать и легко провалить: конфиг, который она сама собирает, обязан пройти её же проверки без единой ошибки и без единого замечания.

Конвертер сверен с двумя программами, которые и задают эти форматы: каждый записанный им ключ OpenSSH читает обратно ssh-keygen, каждый .ppk целиком загружает PuTTYgen, а незашифрованный .ppk на выходе совпадает с файлом PuTTYgen байт в байт.

Это уже окупилось. Тесты поймали обрезанный ключ, получавший оценку A, — тело SSH-ключа это цепочка полей с длиной впереди, и ключ, обрезанный посередине, часто разбирается без единой жалобы. И поймали линтер, который советовал добавить IdentityFile в пустой файл.

Что почитать дальше