Go to file
mirivlad d1bb216d82 Fix: universal hotkeys using Ctrl+combinations
- All hotkeys now use Ctrl+letter (Ctrl+A, Ctrl+E, Ctrl+D, Ctrl+T, Ctrl+F, Ctrl+Q)
- Works on ANY keyboard layout (EN, FR, DE, RU, etc.)
- Ctrl+letter generates same control character regardless of layout
- Updated help text and README

Rationale: Ctrl+A always produces byte 0x01 (SOH) regardless of whether
the physical key is QWERTY 'a', AZERTY 'a', or ЙЦУКЕН 'ф'. This is the
standard approach used by vim, tmux, ranger, etc.
2026-05-26 16:41:42 +08:00
cmd Initial commit: sshkeeper v0.1.0 2026-05-26 09:11:55 +08:00
internal Fix: universal hotkeys using Ctrl+combinations 2026-05-26 16:41:42 +08:00
.gitignore Initial commit: sshkeeper v0.1.0 2026-05-26 09:11:55 +08:00
Makefile Initial commit: sshkeeper v0.1.0 2026-05-26 09:11:55 +08:00
README.md Fix: universal hotkeys using Ctrl+combinations 2026-05-26 16:41:42 +08:00
go.mod Initial commit: sshkeeper v0.1.0 2026-05-26 09:11:55 +08:00
go.sum Initial commit: sshkeeper v0.1.0 2026-05-26 09:11:55 +08:00
main.go Initial commit: sshkeeper v0.1.0 2026-05-26 09:11:55 +08:00
sshkeeper_tz.md Initial commit: sshkeeper v0.1.0 2026-05-26 09:11:55 +08:00

README.md

sshkeeper

Консольный менеджер SSH-подключений для Linux. Управляет профилями серверов, секретами и запускает SSH-сессии через системный OpenSSH.

sshkeeper не заменяет OpenSSH. Он управляет профилями подключений, секретами и удобным запуском SSH-сессий.

Возможности

  • TUI-интерфейс на Bubble Tea — интерактивный терминальный интерфейс
  • CLI-команды для скриптов и быстрых операций
  • Encrypted vault (Argon2id + XChaCha20-Poly1305) для хранения паролей
  • Парольная авторизация через PTY-wrapper (без передачи пароля в argv)
  • Подключение по ключу, SSH-agent, key+passphrase
  • Группы и теги для организации серверов
  • Шаблоны команд для частых задач
  • Генерация OpenSSH config из профилей
  • Импорт из ~/.ssh/config
  • Тестирование подключения без сохранения

Установка

Из исходников

git clone https://git.mirv.top/mirivlad/sshkeeper.git
cd sshkeeper
go build -o ~/.local/bin/sshkeeper .

Требования: Go 1.25+, Linux x86_64

Быстрый старт

# Первый запуск — создание vault и мастер-пароля
sshkeeper init

# Или сразу запустить TUI (vault создастся автоматически)
sshkeeper

# Добавить сервер
sshkeeper add myserver --host 10.0.0.1 --user admin --auth key

# Добавить сервер с паролем
sshkeeper add prod-web --host 10.0.0.5 --user deploy --auth password --password

# Показать список серверов
sshkeeper list

# Подключиться к серверу
sshkeeper connect myserver
sshkeeper c myserver

# Проверить подключение
sshkeeper test myserver

# Запустить команду на сервере
sshkeeper run myserver "uptime"

# Группы
sshkeeper group list

# Редактировать сервер
sshkeeper edit myserver --host 10.0.0.2

# Удалить сервер
sshkeeper delete myserver

# Импорт из ~/.ssh/config
sshkeeper import

# Сгенерировать OpenSSH config
sshkeeper ssh-config generate
sshkeeper ssh-config install-include

TUI

Запуск без аргументов открывает интерактивный терминальный интерфейс:

sshkeeper

Клавиши (работают на любой раскладке — используются Ctrl+комбинации):

Клавиша Действие
Enter Подключиться к серверу
Ctrl+A Добавить сервер
Ctrl+E Редактировать сервер
Ctrl+D Удалить сервер
Ctrl+T Проверить подключение
Ctrl+F Поиск
Ctrl+Q / Ctrl+C Выход

В форме добавления/редактирования:

Клавиша Действие
Tab/↓ Следующее поле
Shift+Tab/↑ Предыдущее поле
Enter Перейти к кнопке / активировать
Esc Назад

Кнопки [Test] и [Save]:

  • Test — проверяет подключение без сохранения
  • Save — сохраняет профиль (не требует тест)

Хранение данных

XDG-совместимые Пути:

Файл Путь
База данных ~/.local/share/sshkeeper/sshkeeper.db
Vault ~/.local/share/sshkeeper/vault.bin
Конфиг ~/.config/sshkeeper/config.toml
SSH config ~/.ssh/config.d/sshkeeper.conf

Vault

Vault — зашифрованное хранилище для паролей и passphrase.

Шифрование: XChaCha20-Poly1305
KDF: Argon2id (4 MiB, 2 iterations)

При первом запуске sshkeeper создаёт vault и запрашивает мастер-пароль. При последующих запусках — запрашивает мастер-пароль для разблокировки.

# Разблокировать vault вручную
sshkeeper vault unlock

# Заблокировать
sshkeeper vault lock

# Сменить мастер-пароль
sshkeeper vault change-password

# Статус
sshkeeper vault status

CLI-команды

sshkeeper                     TUI (по умолчанию)
sshkeeper add [alias]         Добавить сервер
sshkeeper list                Список серверов
sshkeeper show <alias>        Детали сервера
sshkeeper edit <alias>        Редактировать
sshkeeper delete <alias>      Удалить
sshkeeper connect <alias>     Подключиться (c — алиас)
sshkeeper test <alias>        Проверить подключение
sshkeeper search <query>      Поиск
sshkeeper run <alias> <cmd>   Выполнить команду
sshkeeper import              Импорт из ~/.ssh/config
sshkeeper export              Экспорт
sshkeeper group list          Группы
sshkeeper vault [subcommand]  Управление vault
sshkeeper ssh-config generate Генерация SSH config

Сборка

# Собрать
make build

# Установить в ~/.local/bin
make install

# Запуск без сборки
go run .

# Тесты (если есть)
go test ./...

Структура проекта

sshkeeper/
├── main.go                      # Точка входа
├── Makefile                     # Сборка
├── cmd/                         # CLI-команды
│   ├── root.go                  # Root command, initApp
│   ├── tui.go                   # TUI launcher
│   ├── add.go, edit.go, ...     # Команды
│   └── vault.go                 # Vault management
├── internal/
│   ├── config/                  # Конфигурация, XDG paths
│   ├── db/                      # SQLite, migrations, CRUD
│   ├── model/                   # Модели данных
│   ├── vault/                   # Encrypted vault (Argon2id + XChaCha20-Poly1305)
│   ├── ssh/                     # SSH connect, test, PTY-wrapper, import, configgen
│   └── tui/                     # Bubble Tea TUI
└── go.mod

Лицензия

MIT