Я написал SSH‑клиент для Windows

от автора

Со временем у меня появилось несколько серверов: VPS, домашний NAS и ещё пара машин под разные задачи. Для подключения я использовал PuTTY. Он работает, но управлять несколькими серверами в нём неудобно. Сессии хранятся в реестре Windows, список хостов плоский, вкладок нет. Чтобы открыть два сервера, нужны два отдельных окна.

Termius устроен иначе. Там есть нормальный список хостов, вкладки и синхронизация. Но для работы нужен аккаунт, данные хранятся в облаке, а часть функций доступна только по подписке.

Мне не хотелось регистрироваться и загружать список своих серверов в облако ради обычного SSH‑подключения. Поэтому я начал делать собственный клиент — LucidSSH. Это не попытка собрать ещё один комбайн для системных администраторов. Мне нужен был простой локальный SSH‑клиент с несколькими дополнительными функциями: защитой от опасных команд и понятными объяснениями ошибок.

Я не занимаюсь администрированием каждый день. Поэтому делал программу прежде всего для таких же пользователей, как я: тех, кто впервые настраивает VPS, NAS, Raspberry Pi или небольшой домашний сервер. Разрабатываю LucidSSH в свободное от основной работы время.

 Главный экран LucidSSH: список серверов, терминал и встроенный каталог команд

Главный экран LucidSSH: список серверов, терминал и встроенный каталог команд

Почему не PuTTY и не Termius

PuTTY надёжный и привычный. Но он ничего не объясняет и почти не помогает избежать ошибок. Termius, MobaXterm и SecureCRT дают гораздо больше возможностей: SFTP, туннели, макросы, синхронизацию профилей и другие инструменты. Это удобно, когда понимаешь, что тебе нужно и как всё работает. Новичку такой набор может только мешать. Особенно когда сервер уже перестал отвечать и нужно быстро понять, что произошло. LucidSSH находится где‑то между этими вариантами. В нём достаточно функций для обычной работы с сервером, но нет перегруженного интерфейса. Основу приложения составляют три функции.

Три основные функции

Страж опасных команд

Страж проверяет команду до того, как она уйдёт на сервер. Он реагирует на rm -rf, dd и другие команды, которые могут удалить данные или повредить систему. Для подтверждения недостаточно нажать кнопку. Нужно вручную ввести имя файла, каталога или устройства, с которым будет работать команда. Это медленнее обычного диалога с кнопкой «Продолжить». Но стандартные предупреждения быстро перестают замечать. Их подтверждают автоматически, не читая текст. Страж можно отключить полностью или только для конкретного хоста.

 Перед удалением LucidSSH просит вручную подтвердить имя затронутого объекта

Перед удалением LucidSSH просит вручную подтвердить имя затронутого объекта

Офлайн‑детектор ошибок

Детектор работает локально. Без интернета и без LLM. Внутри приложения есть база распространённых ошибок SSH и shell с объяснениями на русском языке. Например:

  • Permission denied;

  • Host key verification failed;

  • Connection refused;

  • ошибки, связанные с nologin.

Объяснение появляется прямо под терминалом. Не нужно копировать ошибку и искать её значение в интернете.

 Объяснение ошибки и варианты проверки появляются прямо под терминалом

Объяснение ошибки и варианты проверки появляются прямо под терминалом

Breadcrumb текущего каталога

Над терминалом находится строка с текущим путём. Она получает данные через интеграцию с shell, а не пытается угадать каталог по тексту приглашения. На любой сегмент пути можно нажать. После этого путь вставляется в командную строку. Функция небольшая, но полезная. Особенно когда открыто несколько вкладок и легко забыть, в каком каталоге сейчас находишься. Она же снижает вероятность выполнить опасную команду не в той папке.

 Над терминалом всегда видны текущий пользователь, хост и рабочий каталог

Над терминалом всегда видны текущий пользователь, хост и рабочий каталог

Что уже есть

Все данные хранятся локально. Для использования LucidSSH не нужен аккаунт. В приложении нет облачной синхронизации и телеметрии. Пароли сохраняются через Windows Credential Manager. Приватные ключи не копируются во внутреннее хранилище приложения. Первая версия LucidSSH уже доступна.

В v1.0 нет:

  • SFTP;

  • объяснения ошибок через LLM;

  • Mosh;

  • Telnet;

  • RDP;

  • VNC.

Я сознательно оставил эти функции за пределами первой версии. Позже станет понятно, какие из них действительно нужны пользователям.

Цифровая подпись

Первая версия вышла без цифровой подписи. Поэтому при запуске Windows показывает предупреждение «Неизвестный издатель». Сертификат стоит денег, и на текущем этапе я не вижу смысла его покупать. Предупреждение не спрятано: я прямо указал это на странице загрузки и внутри приложения.

Репозиторий и лицензия

Репозиторий открыт: LucidSSH.

С лицензией я пока не определился. Этот вопрос ещё изучаю. Буду рад аргументированным советам от тех, кто уже выпускал собственные приложения с открытым исходным кодом.

Зачем я об этом пишу

LucidSSH начинался как программа для моих задач. Уже сейчас он закрывает большую часть того, для чего я его создавал. Но, скорее всего, я не единственный, кому нужен простой SSH‑клиент без обязательного аккаунта, облака и лишних функций. Поэтому я решил открыть проект и рассказать о нём здесь. Особенно интересны критика архитектуры, найденные проблемы и мнение людей, которые регулярно работают с SSH. Issues в репозитории тоже открыты.

ссылка на оригинал статьи https://habr.com/ru/articles/1064410/