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

Основные возможности
- профили 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 и используемые профилями приватные ключи.

Хранилищем может быть:
- общая папка — например 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 доработаны прокрутка, курсор и выделение текста.
Состояние проекта
Статус: активная разработка; текущий стабильный релиз — .
Платформы: 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 ·
Все релизы ·
Руководство ·
Скриншоты ·
Исходный код ·
Сообщить об ошибке
location and original vault master password. No device pairing is required. copy of the random 256-bit sync key. existing encrypted bundle data. Recovery keys and legacy pairing CLI remain compatible for older installations. lets existing users enable or update the password needed for new restores. the dedicated orphaned access files and Git storage. 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. choose Enable / update password recovery (or new password; existing joined devices keep their locally saved random key. enabled, restoring an old bundle still needs its random recovery key. Automated build from the tip of This is not a stable release. It is untagged, unannounced and may be broken. The what you want for normal use. | | | |---|---| | Version | | Commit | 6718822a4656d9073468d4722f726f81ff07bde9 | | Built | 2026-10-18 23:24 UTC | Verify downloads against 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. after releasing the mouse button, without losing the highlighted range. count as word characters. Dragging extends the range by full words. in either direction. Single-character dragging remains unchanged. 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. 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. removes the workspace tab automatically. If that tab was in the background, focus stays on the current workspace. The last tab returns to Servers. retain the terminal output and error in the tab until manually closed. 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 fixes two input regressions found during the first native-Windows test of the v0.8 Session Workspace. 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 the Ctrl modifier from native Windows PageUp/PageDown console events, so supports 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 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. Unix uses a PTY; native Windows uses ConPTY. Terminal state is rendered by running while another tab is active. returns to Servers, current SSH tab. right panel. It can Connect, Tunnel + Connect, start/stop a background tunnel, or open the full port-forward editor. be stopped later without closing the session. wheel navigation, server selection, clickable right-panel actions, and clickable workspace tabs. load/reload, including their temporary SSH config files. retaining stopped entries from old sshkeeper runs. persistent backend for sessions that should survive the sshkeeper process. The Session Workspace is native on Windows and uses the same ConPTY foundation as password/key-passphrase authentication. The ConPTY child environment now defines terminal type even when sshkeeper was launched from cmd.exe. No tmux, MSYS2, or Cygwin layer is required. 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 changed. 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. 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. regression test verifies that unchanged during this local-only repair. 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 fixes one remaining cross-platform upgrade state that can occur after syncing on v0.7.1-v0.7.4. bundle can legitimately end up half-migrated: the key is stored as such as refer to the same synchronized key, writes the key under the local 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 completes the key-path migration for clients that had already joined a sync space with v0.7.0/v0.7.1 before upgrading. client that previously accepted a Linux profile but could not read its when the key record itself has not changed since the previous sync. re-applied together with the key, so the receiving user's local Windows path. the next synchronization replaces the legacy absolute key record with the portable 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 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 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. profile still points to an old Linux absolute path such as record from being interpreted as a local deletion before the remote key can be materialized under the Windows user's transition, so the remote key survives the merge and can be copied locally. 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 · данные кэшируются на сервере.
История релизов
v0.8.6 — sshkeeper v0.8.6
sshkeeper v0.8.6 — password-only sync recovery
Changed
sshkeeper.access; Git sync usessshkeeper-access branch to avoid interference from old clients.
Security note
Upgrade notes
sshkeeper sync enable-password) once before replacing all devices.
nightly — sshkeeper nightly (v0.8.5-4-g6718822)pre-release
main, rebuilt on every push.Latest badge stays on the newest v* release, which isv0.8.5-4-g6718822 |checksums.txt.v0.8.5 — sshkeeper v0.8.5
sshkeeper v0.8.5 — terminal-style mouse selection
Fixed
v0.8.4 — sshkeeper v0.8.4
sshkeeper v0.8.4 — copy from SSH tabs and close completed sessions
Improved
v0.8.1 — sshkeeper v0.8.1
sshkeeper v0.8.1 — Windows workspace input fixes
Fixed
kp_gate selected KP_Mail.
Ctrl+PgUp / Ctrl+PgDn cannot be distinguished there. SSHKeeper now alsoAlt+Left / Alt+Right for previous/next workspace tab. Thev0.8.0 — sshkeeper v0.8.0
sshkeeper v0.8.0 — Session Workspace
Added
github.com/charmbracelet/x/vt, so full-screen terminal applications can keep
Ctrl+PgUp / Ctrl+PgDn cycle tabs, Alt+0Alt+1…Alt+9 select an SSH tab, and Alt+W closes the
Tab to focus the
ssh -N process, then sshkeeper opens an interactive SSH tab. The tunnel can
Changed
tunnels.json on
Windows
TERM=xterm-256color, so remote full-screen applications receive aCompatibility
/home/.../.ssh/... identities even when the shared sync bundle itself has notv0.7.6 — sshkeeper v0.7.6
sshkeeper v0.7.6 — repair local key paths on a quiet sync
Fixed
/home/user/.ssh/id_rsa is rewritten to the receiving device's local.ssh path and the synchronized private/public key is materialized there.
sshkeeper.sync remains byte-for-byte
v0.7.5 — sshkeeper v0.7.5
sshkeeper v0.7.5 — repair partially migrated SSH key paths
Fixed
~/.ssh/id_rsa, while an unchanged server profile still contains a path/home/user/.ssh/id_rsa. Windows now recognizes that both names%USERPROFILE%\.ssh directory, and rewrites IdentityFile accordingly.
v0.7.4 — sshkeeper v0.7.4
sshkeeper v0.7.4 — repair already-synced cross-platform SSH keys
Fixed
/home/.../.ssh/... identity now re-applies the existing remote key even
IdentityFile immediately changes to
~/.ssh/... form.Validation
IdentityFile,v0.7.3 — sshkeeper v0.7.3
sshkeeper v0.7.3 — safe migration of legacy synchronized key paths
Fixed
/home/alice/.ssh/id_ed25519, the first v0.7.3 sync protects that legacy.ssh directory.
~/.ssh/... record ID are treated as unreadable-but-existing during thatUpgrade