███████╗███████╗██╗ ██╗██╗ ██╗ █████╗ ██╗ ██╗██╗ ████████╗
██╔════╝██╔════╝██║ ██║██║ ██║██╔══██╗██║ ██║██║ ╚══██╔══╝
███████╗███████╗███████║██║ ██║███████║██║ ██║██║ ██║
╚════██║╚════██║██╔══██║██║ ██║██╔══██║██║ ██║██║ ██║
███████║███████║██║ ██║╚██████╔╝██║ ██║╚██████╔╝███████╗██║
╚══════╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝
SSH Vault v0.1.0
Author : ratmist
GitHub : https://github.com/ratmist
SSHVAULT — консольная утилита для безопасного хранения и управления SSH-доступами с локальным шифрованием и интерактивным shell-режимом.
Проект задуман как минималистичный security-tool без серверной части, облачной синхронизации и хранения секретов вне машины пользователя.
Features
- Client-side encryption (master password)
- Encrypted local vault
- Interactive shell mode (unlock once)
- SSH connections via Paramiko
- Edit and rotate credentials
- No cloud, no telemetry
Technical details
SSHVAULT реализован как полностью локальная CLI-утилита с акцентом на client-side security и минимальное количество доверенных компонентов.
Для защиты данных используется связка современных криптографических примитивов и проверенных Python-библиотек:
- Argon2id — используется для деривации ключа из master password с целью защиты от brute-force и GPU-атак.
- AES-GCM — применяется для шифрования vault-файла, обеспечивая конфиденциальность и целостность данных.
- Paramiko — используется для установления SSH-соединений и интерактивной работы с удалёнными хостами напрямую из Python.
-
Local encrypted storage —
все учётные данные хранятся в зашифрованном виде в каталоге
~/.sshvault.
Vault architecture
Архитектура vault построена по принципу zero-knowledge: master password никогда не сохраняется и не может быть восстановлен.
При инициализации создаётся salt, на основе которого с помощью Argon2id вычисляется ключ шифрования. Все данные vault шифруются этим ключом и сохраняются в бинарном виде.
При каждом запуске утилиты пользователь вводит master password, который используется исключительно для временной расшифровки данных в памяти. После завершения процесса ключ и расшифрованные данные не сохраняются.
Design decisions
- Отсутствие серверной части и облачной синхронизации — сознательное решение для уменьшения attack surface.
- Интерактивный shell-режим позволяет вводить master password один раз за сессию без его сохранения на диске.
- Поддержка редактирования и ротации учётных данных реализована без хранения промежуточных незашифрованных состояний.
- Потеря master password приводит к полной потере данных — ожидаемое и задокументированное поведение.
Limitations
SSHVAULT не предназначен для замены полноценных enterprise password managers. Проект ориентирован на локальное использование, персональные серверы и лабораторные окружения.
Usage
$ sshvault init
$ sshvault add
$ sshvault list
$ sshvault connect prod
$ sshvault shell