44 lines
1.1 KiB
Bash
Executable file
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"
|