{"repo":"danielrobbins/keychain","free":true,"listed":false,"github":"https://github.com/danielrobbins/keychain","clone":"git clone https://github.com/danielrobbins/keychain.git","description":"A manager for ssh-agent and gpg-agent, now in Python.","language":"Python","stars":1070,"topics":["gpg","gpg-key","security","security-tools","ssh","ssh-client","ssh-key","python"],"license":"GPL-3.0","category":"security-tools","readme_excerpt":"Keychain 3 Keychain orchestrates ssh-agent and gives you one coordinated, long-running SSH agent per user and host. For GnuPG, Keychain can also auto-warm your signing and encryption keys so they are ready for use. Keychain 3 is the evolution of the original Bourne shell-based tool created by Daniel Robbins in 2001. It preserves the single-file deployment model that made Keychain useful for over two decades, while adding modern capabilities: coordinated multi-terminal initialization, stable agent sockets, seamless cron and script integration, PKCS#11 hardware key support, explicit GPG credential warm-up, hardened security defaults, and a comprehensive test suite of 450+ unit and integration tests — now written in Python and distributed as a self-contained executable zipapp with no third-party Python dependencies. For background on the decision to rewrite Keychain in Python, see Why Keychain 3 Uses Python. The Agent Problem Keychain Solves SSH is amazing, but entering your passphrase every time you open a terminal gets old fast. The standard ssh-agent helps, but it has limitations: - One agent per login session — open a new terminal, get a new agent, enter your passphrase again - Cron jobs can't find your agent — background processes run in a different session - No ssh-agent coordination — individual ssh-agent processes are not aware of each other. Keychain fixes all of this: - One agent per host — all terminals share the same long-running agent - Persistent state — cron jobs,","default_branch":null,"files":null,"tree":[],"storefront":"/r/danielrobbins","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/danielrobbins/keychain/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}