DEV Community

Cover image for Using 1Password CLI to Manage Multiple GitHub SSH Keys in a Terminal-Only Debian Setup
Areeb ur Rub
Areeb ur Rub

Posted on

Using 1Password CLI to Manage Multiple GitHub SSH Keys in a Terminal-Only Debian Setup

When working on a headless server or terminal-only environment, managing multiple GitHub SSH keys securely can be challenging — especially when you’re using 1Password. This guide walks you through setting up 1Password CLI to handle SSH keys for multiple GitHub accounts, all without a graphical interface.


📦 Prerequisites

  • Debian or any Linux distro with a terminal
  • 1Password CLI installed (op)
  • SSH installed and working (ssh, ssh-agent, ssh-add)
  • SSH keys (private + public) already stored in 1Password for each GitHub account
  • Public keys added to the corresponding GitHub accounts

🧩 Step-by-Step Setup

🔹 1. Ensure ssh-agent Is Running

Before using any keys, make sure the SSH agent is active:

eval "$(ssh-agent -s)"
Enter fullscreen mode Exit fullscreen mode

To make this automatic, add it to your ~/.bashrc, ~/.zshrc, or shell init file:

echo 'eval "$(ssh-agent -s)"' >> ~/.bashrc
Enter fullscreen mode Exit fullscreen mode

🔹 2. Load SSH Keys from 1Password CLI

Use the 1Password CLI to securely fetch your private key and load it into ssh-agent.

For each GitHub account (say personal and work), run:

# Replace <item-id> with your 1Password item ID
op item get "<item-id>" --field "private key" > ~/.ssh/id_personal
chmod 600 ~/.ssh/id_personal
ssh-add ~/.ssh/id_personal
Enter fullscreen mode Exit fullscreen mode

Repeat for your work account:

op item get "<item-id>" --field "private key" > ~/.ssh/id_work
chmod 600 ~/.ssh/id_work
ssh-add ~/.ssh/id_work
Enter fullscreen mode Exit fullscreen mode

💡 Note: If the key format causes errors (e.g., libcrypto errors), regenerate the key in 1Password using OpenSSH format and re-fetch it.


🔹 3. Configure ~/.ssh/config for Multiple GitHub Accounts

Create or edit your SSH config file:

nano ~/.ssh/config
Enter fullscreen mode Exit fullscreen mode

Add the following:

Host github-personal
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_personal
  IdentitiesOnly yes

Host github-work
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_work
  IdentitiesOnly yes
Enter fullscreen mode Exit fullscreen mode

This tells SSH which identity (key) to use when you refer to GitHub using the alias github-personal or github-work.


🔹 4. Clone Repositories Using Host Aliases

Now that SSH knows which key to use, you can clone repositories like this:

For your personal GitHub account:

git clone git@github-personal:yourusername/repo.git
Enter fullscreen mode Exit fullscreen mode

For your work GitHub account:

git clone git@github-work:yourorg/repo.git
Enter fullscreen mode Exit fullscreen mode

This ensures the correct key is used without conflicts.


✅ Final Verification

To test whether each setup works correctly:

ssh -T github-personal
Enter fullscreen mode Exit fullscreen mode

Expected output:

Hi yourusername! You've successfully authenticated, but GitHub does not provide shell access.
Enter fullscreen mode Exit fullscreen mode

Likewise, for work:

ssh -T github-work
Enter fullscreen mode Exit fullscreen mode

🧠 Bonus: Automate the Workflow

You can wrap the op commands and ssh-add calls in a script and run it after logging in:

#!/bin/bash
eval "$(ssh-agent -s)"
op signin my.1password.com myemail@example.com my-secret-key
op item get "github-personal-key" --field "private key" > ~/.ssh/id_personal
chmod 600 ~/.ssh/id_personal
ssh-add ~/.ssh/id_personal
# Repeat for work
Enter fullscreen mode Exit fullscreen mode

Or add to your shell profile with appropriate session caching.


🛡️ Conclusion

Using the 1Password CLI with ssh-agent gives you a secure and flexible way to manage multiple GitHub SSH identities in a terminal-only setup. Whether you're working across multiple accounts or teams, this setup keeps your keys safe and your workflow efficient — all without ever touching a GUI.

Top comments (0)