wizard-ssh
v1.8.0
Published
Wizard SSH — beautiful interactive CLI to manage SSH servers, tunnels and ~/.ssh/config: CRUD, fuzzy search, instant connect, forward & reverse tunnels, encrypted password vault. (English / Russian UI)
Maintainers
Readme
🧙 Wizard SSH (wssh)
English · Русский
Красивый интерактивный CLI для управления SSH-серверами, туннелями и ~/.ssh/config:
полный CRUD, нечёткий поиск по всему сразу, мгновенное подключение, прямые и
обратные туннели и зашифрованное хранилище паролей (мастер-фраза или Touch ID).
██╗ ██╗██╗███████╗ █████╗ ██████╗ ██████╗ ███████╗███████╗██╗ ██╗
██║ ██║██║╚══███╔╝██╔══██╗██╔══██╗██╔══██╗ ██╔════╝██╔════╝██║ ██║
██║ █╗ ██║██║ ███╔╝ ███████║██████╔╝██║ ██║ ███████╗███████╗███████║
██║███╗██║██║ ███╔╝ ██╔══██║██╔══██╗██║ ██║ ╚════██║╚════██║██╔══██║
╚███╔███╔╝██║███████╗██║ ██║██║ ██║██████╔╝ ███████║███████║██║ ██║
╚══╝╚══╝ ╚═╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═════╝ ╚══════╝╚══════╝╚═╝ ╚═╝Интерактивный CLI для SSH-серверов, туннелей и
~/.ssh/config: полный CRUD, нечёткий поиск, мгновенное подключение, прямые и обратные туннели и зашифрованное хранилище паролей.
✨ Возможности
- 🖥 Серверы =
~/.ssh/config— серверы хранятся прямо в~/.ssh/config(единый источник правды): каждый сервер — этоHost-блок, а описание/теги/способ авторизации и ссылка на сохранённый пароль лежат в комментарии#wssh {…}над блоком. Полный CRUD с авто-бэкапом конфига перед каждой записью; мульти-алиасные блоки иIncludeдоступны для подключения, но не редактируются автоматически. Серверы и~/.ssh/config— одно общее меню. - 🚇 Туннели — прямой
-L, обратный-Rи динамический-D(SOCKS5). Полный CRUD, авто-переподключение при обрыве (autossh-стиль, с бэкоффом, доCtrl+C) и фоновый режим —wssh tunnel startподнимает туннель в фоне,tunnel sessionsпоказывает живые,tunnel downостанавливает. - 🔌 Мгновенное подключение —
wssh connect <имя>или нечёткий выбор из общего списка;--tmuxвходит в постоянную tmux-сессию на сервере. - 🗝 Управление SSH-ключами — отдельный пункт меню (
wssh keys): список с отпечатками, генерация (ssh-keygen: ed25519/rsa/ecdsa и аппаратные ed25519-sk/ecdsa-sk на FIDO2/U2F), показ/копирование публичного ключа, установка на сервер, удаление с предупреждением о том, кто на ключ ссылается. - 📡 Статус-дашборд —
wssh statusмассово и параллельно проверяет доступность всех серверов и туннелей; фильтры--servers/--tunnels/--tag,--json, exit-код для скриптов. - 🔍 Единый поиск — fuzzy по серверам, туннелям и хостам конфига одновременно.
- 🕘 История — дата последнего использования и счётчик; сортировки по
recent / name / uses / created / updated. - 🔐 Зашифрованные пароли — AES-256-GCM, ключ из мастер-фразы (scrypt), вводится
раз за сессию. На macOS — опциональная разблокировка по Touch ID. Для скриптов —
фраза из окружения (
WSSH_VAULT_PASSPHRASE[_FILE|_CMD]). Можно удалить отдельный сохранённый пароль или сбросить хранилище (забыл фразу) — серверы и туннели остаются. - 🛠 Действия по SSH — проверка доступности,
ssh-copy-id, выполнение команды, передача файлов (scpилиrsync), группы по тегам, управлениеknown_hosts— показать записи и удалить выбранную или по IP (ssh-keygen -R). - 🤖 Скриптуемость — неинтерактивное создание серверов/туннелей флагами, сквозной
--json, глобальные--yes/--non-interactive,wssh doctor(диагностика окружения) иwssh info(сводка путей и инвентаря). - 📦 Экспорт/импорт — бэкап всех списков (и зашифрованного хранилища) в один файл.
- ⌨️ Списки с хоткеями — везде один и тот же выбор: начни печатать — фильтр на лету,
Tab— смена сортировки,↑/↓— навигация,Enter— выбрать,Escили «← Назад» — вернуться/выйти (из любого меню можно уйти, ничего не выбирая). - 🎨 Единый визуальный стиль: градиентный баннер, рамки и секции (со смайликами), ровные строки без иконок в самих списках, понятные ошибки. RU-интерфейс.
🚀 Быстрый старт
pnpm install
pnpm build
pnpm link --global # делает доступными команды `wssh` и `wizard-ssh`
wssh # интерактивное менюПодробнее в docs/INSTALL.md и docs/USAGE.md.
🧭 Команды
| Команда | Назначение |
| ------------------------------------------------------- | --------------------------------------------------- |
| wssh | интерактивное меню |
| wssh connect [имя] (up, go) [--tmux [сессия]] | подключиться к серверу/туннелю/алиасу из конфига |
| wssh server <add\|edit\|rm\|ls\|connect> (srv, s) | CRUD серверов = хостов ~/.ssh/config |
| wssh tunnel <add\|edit\|rm\|ls\|connect> (tun, t) | CRUD + поднятие туннелей |
| wssh tunnel <start\|sessions\|down> | фоновые туннели: поднять / список / остановить |
| wssh keys <ls\|gen\|rm> (key) | SSH-ключи: список/отпечатки, генерация, удаление |
| wssh status [--servers\|--tunnels\|--tag\|--json] | массовая параллельная проверка доступности |
| wssh config <ls\|add\|edit\|rm\|connect> (cfg) | то же, «сырой» доступ к ~/.ssh/config |
| wssh search <запрос> (find) [--json] | единый нечёткий поиск |
| wssh check [имя] [--json] | проверка доступности (ping порта) |
| wssh copy-id [имя] | установить ключ на сервер (ssh-copy-id) |
| wssh run <имя> -- <cmd> | выполнить команду на сервере |
| wssh transfer [имя] (scp) | передача файлов по scp или rsync |
| wssh group <ls\|check <tag>> | группы по тегам: размеры и массовая проверка |
| wssh forget-host [имя\|ip] (known-hosts) [--list] | известные хосты: удалить (ssh-keygen -R) / список |
| wssh doctor · wssh info (env) | диагностика окружения · сводка путей/инвентаря |
| wssh vault | управление хранилищем паролей |
| wssh settings | значения по умолчанию |
| wssh export [файл] · wssh import <файл> [--replace] | бэкап / восстановление |
| wssh completion install (uninstall) | установить/удалить автодополнение (автоопределение) |
| wssh path | путь к директории данных |
Автодополнение шелла. wssh completion install настраивает его автоматически: определяет
bash / zsh / fish (и oh-my-zsh), кладёт файл автодополнения в нужное место, при необходимости
правит rc-файл и пересобирает кэш compinit для zsh. Можно указать шелл явно
(wssh completion install bash), а wssh completion <shell> просто печатает скрипт для ручной
установки. После установки перезапустите шелл (или exec zsh).
Списки сортируются: wssh server ls --sort recent|name|uses|created|updated [--reverse] [--json].
Язык интерфейса. Поддерживаются ru и en (на базе i18n-typed-store).
Выбор: переменная WSSH_LANG (приоритет) → настройка «Язык интерфейса» в wssh settings → системная локаль
(LC_ALL/LANG); по умолчанию определяется автоматически.
WSSH_LANG=en wssh # запустить в английском
WSSH_LANG=ru wssh doctor # принудительно русскийСкриптинг (без вопросов). Серверы и туннели можно создавать флагами, а подтверждения — автоматизировать:
wssh server add prod --host 10.0.0.5 --user deploy --auth key --key ~/.ssh/id_ed25519
wssh tunnel add --alias prod --type local --local 8080 --remote-port 80
wssh -y keys rm ~/.ssh/old_key # -y / --yes — отвечать «да» на всё
wssh --non-interactive status --json # никаких подсказок; машинно-читаемый вывод
WSSH_VAULT_PASSPHRASE=… wssh run prod -- uptime # парольная фраза хранилища из env🔐 Данные и безопасность
- Все данные — в
~/.wizard-ssh/(файлы с правами0600). Каталог можно переопределить переменнойWIZARD_SSH_HOME. - Пароли не хранятся в открытом виде. Они шифруются AES-256-GCM ключом, выведенным из мастер-фразы (scrypt). Фраза вводится один раз за сессию и держится только в памяти.
- На macOS можно включить Touch ID — биометрия разблокирует ключ, лежащий в Keychain
(нужны macOS + Xcode Command Line Tools для
swiftc). Это слой удобства; корень доверия — мастер-фраза. Подробности и компромисс — в docs/USAGE.md. - Перед любой записью в
~/.ssh/configсоздаётся бэкап в~/.wizard-ssh/backups/. - Повреждённый JSON не теряется: создаётся резервная копия, приложение стартует с чистого листа.
🏗 Архитектура
src/
cli.ts точка входа (commander)
core/ типы, пути (~/.wizard-ssh), константы, ошибки
utils/ валидаторы, время, строки, exec, платформа
store/ серверы поверх ~/.ssh/config + usage.json (статистика), туннели/настройки/сниппеты (JSON), фоновые сессии
vault/ crypto (AES-GCM/scrypt), Touch ID, vault
ssh-config/ парсер + writer (CRUD по ~/.ssh/config) с аннотациями #wssh
ssh/ сборка ssh-аргументов, runner (+ авто-reconnect, фоновые туннели), фичи (check/статус/copy-id/run/scp/rsync), ключи, known_hosts
ui/ тема, баннер, сообщения, таблицы, prompts, list-prompt (выбор с фильтром/сортировкой), rows (единые строки)
search/ единый нечёткий поиск
commands/ CRUD-флоу, действия, меню, wiring commander🛠 Разработка
pnpm dev # запуск через tsx без сборки
pnpm typecheck # tsc --noEmit
pnpm lint # eslint
pnpm format # prettier --write
pnpm test # vitest
pnpm test:coverage # vitest + покрытие
pnpm build # tsup → dist/Коммиты — по Conventional Commits (проверяется commitlint через husky; перед коммитом — lint-staged: eslint --fix + prettier).
Лицензия
MIT.
