sshkeeper

← Все публичные проекты

Консольный менеджер SSH-подключений, маршрутов, секретов и туннелей со встроенными интерактивными SSH-вкладками.

sshkeeper не заменяет OpenSSH и не пытается быть Ansible. Это локальный менеджер подключений: он хранит профили серверов в SQLite, пароли и passphrase — в зашифрованном vault, умеет собирать маршруты через bastion/jump-host’ы и запускает системный ssh с нужными параметрами.

Основной интерфейс — TUI на Bubble Tea с управлением с клавиатуры и мышью. SSH-подключения открываются в отдельных вкладках внутри приложения: можно переключаться между серверами и списком профилей, не прерывая работающие соединения. Те же профили и операции доступны через CLI для скриптов.

Интерфейс sshkeeper: список SSH-профилей и действия

Основные возможности

  • профили SSH-серверов, группы, теги и заметки;
  • авторизация по ключу, через ssh-agent, по паролю и с passphrase;
  • зашифрованный локальный vault для паролей и passphrase;
  • маршруты / ProxyJump и цепочки bastion-host’ов со стабильными ссылками на профили;
  • Local, Remote и SOCKS port forwarding;
  • запуск, просмотр и остановка фоновых SSH-туннелей;
  • встроенное рабочее пространство SSH: несколько живых вкладок, переключение между серверами и dashboard без разрыва соединений;
  • эмуляция терминала через x/vt: PTY для Linux/macOS и ConPTY для Windows;
  • прокрутка истории SSH-вывода, выделение и копирование текста мышью, двойной клик по слову, тройной — по строке;
  • автоматическое закрытие вкладки после успешного exit и сохранение вывода, если SSH завершился с ошибкой;
  • опциональные постоянные SSH-сессии через tmux, которые могут пережить закрытие самого sshkeeper;
  • шаблоны команд и запуск команд на выбранных серверах;
  • живой fuzzy-поиск по имени, alias, host, пользователю, группе, тегам, заметкам, маршрутам и портам;
  • сортировка по имени, последнему использованию или группам, сворачиваемые группы и индикаторы тестов, туннелей и сессий;
  • массовая проверка доступности видимых или отмеченных серверов;
  • импорт существующего ~/.ssh/config, экспорт и генерация OpenSSH-конфигурации;
  • русский и английский интерфейс;
  • полноценный CLI для автоматизации.

Зашифрованная синхронизация между устройствами

Начиная с v0.7.0, sshkeeper умеет синхронизировать между несколькими компьютерами профили, маршруты, port-forward правила, группы, теги, шаблоны команд, секреты vault и используемые профилями приватные ключи.

Настройки синхронизации sshkeeper

Хранилищем может быть:

  • общая папка — например Syncthing, Nextcloud, Dropbox или сетевой диск;
  • Git-репозиторий на отдельной ветке.

Все синхронизируемые данные передаются внутри одного зашифрованного файла. Начиная с v0.8.6, для восстановления синхронизации на новом устройстве достаточно указать расположение зашифрованного хранилища и исходный мастер-пароль vault. Привязка устройства одноразовыми кодами больше не требуется. Для старых sync-space нужно на уже подключённом устройстве однократно включить восстановление по паролю через интерфейс или sshkeeper sync enable-password. Legacy-подключение и recovery key сохранены для совместимости. После смены мастер-пароля необходимо обновить пароль восстановления. Поскольку зашифрованный ключ доступа допускает офлайн-подбор пароля, используйте длинный уникальный мастер-пароль и ограничивайте доступ к хранилищу.

В версиях 0.7.2–0.7.6 дополнительно исправлена синхронизация путей приватных SSH-ключей между Linux и Windows: профиль получает путь к ключу на текущем устройстве, а не чужой /home/.... Уже существующие синхронизированные профили восстанавливаются при повторной синхронизации.

Локальные состояния — последний вход, результаты тестов, запущенные туннели, язык интерфейса и сортировка — между машинами не переносятся.

Маршруты, туннели и сессии

Маршруты хранятся как упорядоченная цепочка переходов. Если hop ссылается на профиль sshkeeper, связь идёт по стабильному ID: переименование bastion-профиля не ломает зависимые подключения. Для сессии sshkeeper сам формирует временный OpenSSH config, поэтому имя профиля не обязано дублироваться в ~/.ssh/config.

Port forward в sshkeeper — это сохранённое правило, а tunnel — уже запущенный SSH-процесс, который активирует такие правила. Встроенные вкладки SSH работают без tmux и остаются активными, пока работает sshkeeper. Для соединений, которые должны пережить завершение самого приложения, доступен отдельный необязательный режим постоянных сессий на базе tmux.

Встроенный SSH-терминал и вкладки

С версии 0.8.0 обычная команда «Подключиться» открывает SSH прямо внутри интерфейса. Соединение можно оставить работающим, вернуться к списку серверов, открыть другую вкладку или управлять фоновыми туннелями. На Linux и macOS это PTY, на Windows — ConPTY; сам SSH по-прежнему выполняет системный OpenSSH.

  • Alt+0 — список серверов; Alt+1…9 — выбор SSH-вкладки;
  • Alt+←/→ — переключение вкладок; Alt+W — закрытие текущей;
  • колесо мыши и PgUp/PgDn — прокрутка истории вывода; при вводе возвращается текущий экран;
  • обычное перетаскивание мышью — выделение с копированием в системный буфер; двойной щелчок выделяет слово, тройной — строку;
  • если выделение довести до верхнего или нижнего края, история прокручивается автоматически; обычная прокрутка не сбрасывает выделение;
  • после успешного exit вкладка закрывается сама, а при ошибке сохраняет последний вывод для диагностики.

Терминал поддерживает историю командного вывода и отображение курсора в полноэкранных программах вроде vim и nano. В версии 0.8.2 отрисовка стала событийной: простаивающие SSH-вкладки не обновляют интерфейс по таймеру каждые 50 мс. В 0.8.3–0.8.5 доработаны прокрутка, курсор и выделение текста.

Состояние проекта

Статус: активная разработка; текущий стабильный релиз — Последняя стабильная версия sshkeeper на GitHub.
Платформы: Linux amd64/arm64 и macOS amd64/arm64 — основные цели; Windows amd64 — экспериментально.
Пакеты: для Linux выпускаются .deb, .rpm и tar.gz; для macOS — tar.gz; для Windows — ZIP.
Зависимости: системный OpenSSH; встроенный SSH-терминал работает без tmux; tmux нужен только для сессий, переживающих выход из приложения; git — только при Git-синхронизации.
Технологии: Go, Bubble Tea, x/vt, Cobra, SQLite, OpenSSH, PTY / ConPTY.
Лицензия: MIT.

Установка

Debian / Ubuntu, amd64:

sudo apt install ./sshkeeper_*_amd64.deb

Fedora / RHEL family, x86_64:

sudo dnf install ./sshkeeper-*.x86_64.rpm

После установки проверить реально запускаемый бинарник и версию можно так:

command -v sshkeeper
sshkeeper --version

Безопасность

Vault использует XChaCha20-Poly1305, а мастер-пароль проходит через Argon2id. Секреты не передаются через аргументы командной строки. Синхронизация также шифруется до помещения данных в общую папку или Git-репозиторий.

Независимого аудита безопасности проект пока не проходил, поэтому для особо критичных сред стоит отдельно изучить реализацию и модель угроз.

Ссылки

Скачать последний стабильный релиз ·
Статья о версии 0.8.5 ·
Все релизы ·
Руководство ·
Скриншоты ·
Исходный код ·
Сообщить об ошибке


История релизов

v0.8.6 — sshkeeper v0.8.6

sshkeeper v0.8.6 — password-only sync recovery

Changed

  • New installations restore an existing encrypted sync with the storage

location and original vault master password. No device pairing is required.

  • Creating a sync space publishes a separately encrypted, password-recoverable

copy of the random 256-bit sync key.

  • Existing spaces can enable the new workflow in place without rewriting

existing encrypted bundle data. Recovery keys and legacy pairing CLI remain

compatible for older installations.

  • The TUI no longer shows device pairing controls. A recovery-password action

lets existing users enable or update the password needed for new restores.

  • Folder sync stores the access envelope in sshkeeper.access; Git sync uses

the dedicated sshkeeper-access branch to avoid interference from old clients.

  • Tests cover new/legacy restore, wrong passwords, SSH private keys and secrets,

orphaned access files and Git storage.

Security note

A stolen password-protected access file **can be subjected to offline master

password guesses**, unlike the previous randomly keyed recovery-only approach.

The key wrapper uses Argon2id (128 MiB, three passes) and XChaCha20-Poly1305.

Use a strong unique master password and restrict remote storage permissions.

Server-side version history is needed to recover from deletion or rollback.

Upgrade notes

  • Existing devices continue syncing normally; on an already connected machine

choose Enable / update password recovery (or

sshkeeper sync enable-password) once before replacing all devices.

  • After changing your original master password, re-publish recovery with the

new password; existing joined devices keep their locally saved random key.

  • If the original installation is already gone and migration was never

enabled, restoring an old bundle still needs its random recovery key.

nightly — sshkeeper nightly (v0.8.5-4-g6718822)pre-release

Automated build from the tip of main, rebuilt on every push.

This is not a stable release. It is untagged, unannounced and may be

broken. The Latest badge stays on the newest v* release, which is

what you want for normal use.

| | |

|---|---|

| Version | v0.8.5-4-g6718822 |

| Commit | 6718822a4656d9073468d4722f726f81ff07bde9 |

| Built | 2026-10-18 23:24 UTC |

Verify downloads against checksums.txt.

v0.8.5 — sshkeeper v0.8.5

sshkeeper v0.8.5 — terminal-style mouse selection

Fixed

  • Drag-to-scroll selection. Holding a mouse selection against the top or

bottom edge automatically scrolls through SSH output. The selected range can

extend well beyond the visible terminal rows. Timers run only while dragging

at an edge and stop when the drag ends.

  • Mouse wheel preserves selection. Scrollback may be browsed before or

after releasing the mouse button, without losing the highlighted range.

  • Double-click selects a word. Unicode letters, digits and underscores

count as word characters. Dragging extends the range by full words.

  • Triple-click selects a line. Dragging extends the range by full lines,

in either direction. Single-character dragging remains unchanged.

  • Usual mouse features retained. Clickable tabs, scrolling and automatic

clipboard copy on mouse release still work.

Regression tests cover Unicode, punctuation, word/line drags, selection across

scrollback, repeating edge scrolling, wheel preservation, multi-click timing,

clipboard copy and cancelled timers.

v0.8.4 — sshkeeper v0.8.4

sshkeeper v0.8.4 — copy from SSH tabs and close completed sessions

Improved

  • Text selection without Shift. Left-button drag in an embedded SSH tab

highlights text and copies it to the system clipboard on release. Selection

supports Unicode, multiple lines and the scrollback viewport. Native clipboard

support is used where available; terminal OSC 52 is a fallback.

  • Successful SSH exit closes its tab. Clean remote shell exit (status 0)

removes the workspace tab automatically. If that tab was in the background,

focus stays on the current workspace. The last tab returns to Servers.

  • Failures remain inspectable. Nonzero SSH exit status or connection errors

retain the terminal output and error in the tab until manually closed.

  • No regression to navigation. The terminal mouse wheel still scrolls output,

and clicking the tab strip still switches tabs.

Automated regression tests cover text selection, scrollback, Unicode, clean

exits and failed SSH processes. Normal tmux-backed persistent sessions remain

independent from the embedded PTY/ConPTY workspace.

v0.8.1 — sshkeeper v0.8.1

sshkeeper v0.8.1 — Windows workspace input fixes

v0.8.1 fixes two input regressions found during the first native-Windows test of

the v0.8 Session Workspace.

Fixed

  • Mouse clicks now select the row actually clicked. The dashboard header is

two terminal rows (title plus separator), but v0.8.0 mouse hit-testing counted

it as one. On the server list this selected the next visible row, e.g. clicking

kp_gate selected KP_Mail.

  • Reliable workspace cycling on native Windows. Bubble Tea 1.3.x discards

the Ctrl modifier from native Windows PageUp/PageDown console events, so

Ctrl+PgUp / Ctrl+PgDn cannot be distinguished there. SSHKeeper now also

supports Alt+Left / Alt+Right for previous/next workspace tab. The

original Ctrl+PageUp/PageDown shortcuts remain available on terminals that

report them correctly.

Regression tests cover grouped server-list mouse coordinates and the new

workspace cycle shortcut.

v0.8.0 — sshkeeper v0.8.0

sshkeeper v0.8.0 — Session Workspace

v0.8.0 turns the main TUI into a live SSH workspace. Interactive SSH no longer

has to replace the sshkeeper interface: sessions live in embedded tabs and can

keep running while you return to the dashboard, manage tunnels, or open another

server.

Added

  • Embedded SSH tabs on every platform. Normal Connect opens a workspace tab.

Unix uses a PTY; native Windows uses ConPTY. Terminal state is rendered by

github.com/charmbracelet/x/vt, so full-screen terminal applications can keep

running while another tab is active.

  • Workspace tab switching. Ctrl+PgUp / Ctrl+PgDn cycle tabs, Alt+0

returns to Servers, Alt+1…Alt+9 select an SSH tab, and Alt+W closes the

current SSH tab.

  • Selected-profile actions. On the wide dashboard press Tab to focus the

right panel. It can Connect, Tunnel + Connect, start/stop a background tunnel,

or open the full port-forward editor.

  • Tunnel + Connect. Enabled forwards start as an independent background

ssh -N process, then sshkeeper opens an interactive SSH tab. The tunnel can

be stopped later without closing the session.

  • Mouse input. Bubble Tea mouse events are enabled. The dashboard supports

wheel navigation, server selection, clickable right-panel actions, and

clickable workspace tabs.

Changed

  • Dead background tunnel records are garbage-collected from tunnels.json on

load/reload, including their temporary SSH config files.

  • The Running tunnels manager reloads and shows live processes rather than

retaining stopped entries from old sshkeeper runs.

  • Quitting with live embedded SSH tabs asks for confirmation.
  • The existing tmux backend remains available on Linux/macOS as an optional

persistent backend for sessions that should survive the sshkeeper process.

Windows

The Session Workspace is native on Windows and uses the same ConPTY foundation

as password/key-passphrase authentication. The ConPTY child environment now

defines TERM=xterm-256color, so remote full-screen applications receive a

terminal type even when sshkeeper was launched from cmd.exe. No tmux, MSYS2,

or Cygwin layer is required.

Compatibility

No database migration is required. v0.8.0 includes the v0.7.6 quiet-sync

key-path repair, so Windows clients upgraded from older releases repair legacy

/home/.../.ssh/... identities even when the shared sync bundle itself has not

changed.

v0.7.6 — sshkeeper v0.7.6

sshkeeper v0.7.6 — repair local key paths on a quiet sync

v0.7.6 fixes the remaining upgrade case where the shared sync bundle is

already correct but a local Windows profile still points at a Linux identity

path.

Fixed

  • Local repair no longer depends on Incoming records. Before merge, sync

now checks already-synchronized profiles against the remote key records and

repairs device-local key paths independently from whether anything changed

in the shared bundle.

  • Quiet sync repairs Windows state. A profile left with

/home/user/.ssh/id_rsa is rewritten to the receiving device's local

.ssh path and the synchronized private/public key is materialized there.

  • Shared storage stays untouched when it is already correct. The

regression test verifies that sshkeeper.sync remains byte-for-byte

unchanged during this local-only repair.

  • Safety remains strict. Repair only applies to a profile already linked

to its remote server record and never overwrites a different existing local

private key.

No re-pairing or manual edit is required. Upgrade and run synchronization once.

v0.7.5 — sshkeeper v0.7.5

sshkeeper v0.7.5 — repair partially migrated SSH key paths

v0.7.5 fixes one remaining cross-platform upgrade state that can occur after

syncing on v0.7.1-v0.7.4.

Fixed

  • Repair a legacy profile when its key record is already portable. A sync

bundle can legitimately end up half-migrated: the key is stored as

~/.ssh/id_rsa, while an unchanged server profile still contains a path

such as /home/user/.ssh/id_rsa. Windows now recognizes that both names

refer to the same synchronized key, writes the key under the local

%USERPROFILE%\.ssh directory, and rewrites IdentityFile accordingly.

  • Regression coverage for the real upgrade state. The test suite now

models an already-synced Windows client whose key record has migrated but

whose server record has not.

No database migration or re-pairing is required. Run synchronization once

after upgrading.

v0.7.4 — sshkeeper v0.7.4

sshkeeper v0.7.4 — repair already-synced cross-platform SSH keys

v0.7.4 completes the key-path migration for clients that had already joined a

sync space with v0.7.0/v0.7.1 before upgrading.

Fixed

  • Retry unchanged remote keys when the local file is missing. A Windows

client that previously accepted a Linux profile but could not read its

/home/.../.ssh/... identity now re-applies the existing remote key even

when the key record itself has not changed since the previous sync.

  • Repair the profile in the same sync. The corresponding profile is

re-applied together with the key, so IdentityFile immediately changes to

the receiving user's local Windows path.

  • Finish the shared-bundle migration. Once the key is readable locally,

the next synchronization replaces the legacy absolute key record with the

portable ~/.ssh/... form.

Validation

There is now an end-to-end regression test for the exact upgrade state:

v0.7.1-style Windows database and sync state, Linux absolute IdentityFile,

missing local key file, followed by one v0.7.4 synchronization. The test

requires the key file to be restored and the profile path to be rewritten.

v0.7.3 — sshkeeper v0.7.3

sshkeeper v0.7.3 — safe migration of legacy synchronized key paths

v0.7.3 includes all Windows and portable-key fixes from v0.7.2 and adds one

upgrade safeguard for devices that already synchronized with v0.7.0/v0.7.1.

Fixed

  • Existing Windows clients keep legacy key records during migration. If a

profile still points to an old Linux absolute path such as

/home/alice/.ssh/id_ed25519, the first v0.7.3 sync protects that legacy

record from being interpreted as a local deletion before the remote key can

be materialized under the Windows user's .ssh directory.

  • Both the legacy absolute-path record ID and its new portable

~/.ssh/... record ID are treated as unreadable-but-existing during that

transition, so the remote key survives the merge and can be copied locally.

Upgrade

No re-pairing or database migration is required. Upgrade both sides as usual

and run synchronization once. Profiles and key files are migrated in place.

Источник: GitHub Releases · данные кэшируются на сервере.