Observed since 20 Oct, 19:25 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
Simple user access management for Linux servers. Like apt install but for people.
Simple user access management for Linux servers. Like apt install but for people.
Inspired by Yahoo's internal yinst package manager that made server user management effortless.
After years of manually copying SSH keys and editing sudoers files across servers, I built addy to treat user access like package management. Want to give Alice access? addy install user/alice. Need to grant sudo? addy install sudo/alice. Your Git repository becomes the single source of truth.
apt install?# Install from PyPI (recommended)
pip install addy
# Or quick install script
curl -fsSL https://raw.githubusercontent.com/abhinavs/addy/main/install.sh | bash
# Or install from source
git clone https://github.com/abhinavs/addy.git
cd addy
pip install -e .
Create a Git repository with your team's SSH keys:
your-addy-users-repo/
└── users/
├── alice.pub
├── bob.pub
└── charlie.pub
Each .pub file contains a user's SSH public key.
# Set your Git repository (can be private)
sudo addy config set git-repo git@github.com:your-org/your-addy-users-repo.git
# For private repos, set up a deploy key
sudo addy config set ssh-key-path /etc/addy/deploy_key
# Give SSH access
sudo addy install user/alice
# Grant sudo privileges
sudo addy install sudo/alice
# Remove access
sudo addy remove user/alice
sudo addy remove sudo/alice
When you run addy install user/alice:
users/alice.pub in the repoalice (if needed)~alice/.ssh/authorized_keysWhen you run addy install sudo/alice:
alice exists/etc/sudoers.d/alice with passwordless sudovisudo to prevent syntax errors# Configure addy
sudo addy config set git-repo git@github.com:company/ssh-keys.git
# Grant SSH access to a new employee
sudo addy install user/john
# Give them sudo rights for deployments
sudo addy install sudo/john
# Remove access when they leave
sudo addy remove sudo/john
sudo addy remove user/john
# Use a specific branch
sudo addy config set git-branch production
# Set up private repository access
sudo addy config set ssh-key-path /etc/addy/readonly_deploy_key
# Manually sync repository
sudo addy sync
# View all configuration
sudo addy config list
Addy integrates seamlessly with automation:
# In your deployment script
sudo addy install user/deployment-bot
sudo addy install sudo/deployment-bot
# In your offboarding script
sudo addy remove sudo/departing-employee
sudo addy remove user/departing-employee
Your Git repository should follow this structure:
your-addy-users-repo/
├── users/
│ ├── alice.pub # Alice's SSH public key
│ ├── bob.pub # Bob's SSH public key
│ └── charlie.pub # Charlie's SSH public key
└── README.md # Optional: document your access policies
ssh-rsa (RSA keys)ssh-ed25519 (Ed25519 keys)ecdsa-sha2-* (ECDSA keys)| Setting | Description | Default |
|---|---|---|
git-repo | Git repository URL | Required |
git-branch | Git branch to use | main |
ssh-key-path | SSH private key for Git access | None |
Addy has a comprehensive test suite:
# Install development dependencies
pip3 install -r requirements-dev.txt
# Run tests
pytest
# Run with coverage
pytest --cov=addy --cov-report=html
# Run specific test categories
pytest -m unit # Unit tests only
pytest -m integration # Integration tests only
pytest -m "not slow" # Skip slow tests
Git clone/pull fails:
# Check your repository URL
sudo addy config get git-repo
# Verify SSH key permissions (if using deploy key)
sudo ls -la /etc/addy/deploy_key
User creation fails:
# Check if user already exists
id username
# Verify sufficient permissions
sudo addy sync
SSH key validation errors:
# Test key format locally
ssh-keygen -l -f /path/to/key.pub
# Check repository structure
git clone your-addy-users-repo && ls -la users/
# Enable verbose logging
sudo addy --verbose sync
sudo addy --verbose install user/alice
We welcome contributions! Please see our Contributing Guide for details.
git clone https://github.com/abhinavs/addy.git
cd addy
# Create and activate virtual environment (recommended)
python3 -m venv venv
source venv/bin/activate
# Install dependencies
pip install -r requirements-dev.txt
pip install -e .
# Run tests
pytest
# Code formatting
black addy/
flake8 addy/
Note: If you encounter "externally managed environment" errors, you must use a virtual environment as shown above. This is required on systems with Homebrew Python or similar package managers.
This project is licensed under the MIT License - see the LICENSE file for details.
Built with ❤️ by @abhinavs for system administrators who believe user management shouldn't be painful.
Inspired by the elegance of Yahoo's yinst package manager - because granting server access should be as simple as installing packages.
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 1.0.3 | 19 Jul 2025 | 10 |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 19:25 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:6042de3f527b8dcbd8f8dd5da37792ec81564d6aed1092d315d4262b547cf618