nix/bin/gpg-backup-key
2025-12-03 20:09:09 -06:00

44 lines
1.1 KiB
Bash
Executable file

#!/bin/bash
# Backup GPG key (both private and public) to a directory
# Usage: gpg-backup-key [output-dir] [key-id or email]
set -e
OUTPUT_DIR="${1:-$HOME}"
KEY_ID="${2:-}"
# If no key specified, use first secret key
if [[ -z $KEY_ID ]]; then
KEY_ID=$(gpg --list-secret-keys --keyid-format LONG 2>/dev/null | grep '^sec' | head -1 | sed 's/.*\/\([A-F0-9]*\) .*/\1/')
fi
if [[ -z $KEY_ID ]]; then
echo "Error: No GPG key found"
exit 1
fi
# Create output directory if needed
mkdir -p "$OUTPUT_DIR"
PRIVATE_KEY="$OUTPUT_DIR/gpg-private-key-$KEY_ID.asc"
PUBLIC_KEY="$OUTPUT_DIR/gpg-public-key-$KEY_ID.asc"
echo "Backing up GPG key $KEY_ID"
echo ""
echo "Exporting private key to $PRIVATE_KEY..."
gpg --armor --export-secret-keys "$KEY_ID" >"$PRIVATE_KEY"
chmod 600 "$PRIVATE_KEY"
echo "Exporting public key to $PUBLIC_KEY..."
gpg --armor --export "$KEY_ID" >"$PUBLIC_KEY"
echo ""
echo "Backup complete!"
echo " Private key: $PRIVATE_KEY"
echo " Public key: $PUBLIC_KEY"
echo ""
echo "WARNING: Keep your private key safe and never share it!"
echo ""
echo "To restore, run:"
echo " gpg-restore-key $PRIVATE_KEY"