npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

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)

Readme

🧙 Wizard SSH (wssh)

English · Русский

npm version ci license: MIT node

Красивый интерактивный 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.