Skip to content

Instantly share code, notes, and snippets.

@Killeroid
Created October 18, 2017 11:51
Show Gist options
  • Save Killeroid/6361944d0694e474fb94cc42a3b119d1 to your computer and use it in GitHub Desktop.
Save Killeroid/6361944d0694e474fb94cc42a3b119d1 to your computer and use it in GitHub Desktop.
How to export and import gpg keys

Every so often I have to restore my gpg keys and I'm never sure how best to do it. So, I've spent some time playing around with the various ways to export/import (backup/restore) keys.

Method 1

Gotten from the RedHat GPG migration manual

Backup the public and secret keyrings and trust database

## Export all public keys
gpg -a --export >mypubkeys.asc

## Export all encrypted private keys (which will also include corresponding public keys)
gpg -a --export-secret-keys >myprivatekeys.asc

## Export gpg's trustdb to a text file
gpg --export-ownertrust >otrust.txt

Restore the public and secret keyrings and trust database

gpg --import myprivatekeys.asc
gpg --import mypubkeys.asc
gpg -K
gpg -k
gpg --import-ownertrust otrust.txt

Method 2

Backup the public and secret keyrings and trust database

cp ~/.gnupg/pubring.gpg /path/to/backups/
cp ~/.gnupg/secring.gpg /path/to/backups/
cp ~/.gnupg/trustdb.gpg /path/to/backups/
# or, instead of backing up trustdb...
gpg --export-ownertrust > chrisroos-ownertrust-gpg.txt

NOTE The GPG manual suggests exporting the ownertrust instead of backing up the trustdb, although it doesn't explain why.

Restore the public and secret keyrings and trust database

cp /path/to/backups/*.gpg ~/.gnupg/
# or, if you exported the ownertrust
gpg --import-ownertrust chrisroos-ownertrust-gpg.txt

Method 3

This only really works if you don't mind losing any other keys (than your own).

Export public and secret key and ownertrust

gpg -a --export [email protected] > chrisroos-public-gpg.key
gpg -a --export-secret-keys [email protected] > chrisroos-secret-gpg.key
gpg --export-ownertrust > chrisroos-ownertrust-gpg.txt

Import secret key (which contains the public key) and ownertrust

gpg --import chrisroos-secret-gpg.key
gpg --import-ownertrust chrisroos-ownertrust-gpg.txt

Method 4

This is mainly about trusting my key once I've imported it (by either restoring the pubring.gpg and secring.gpg, or by using --import). This seems to be what I do the most as I either forget to import the trustdb or ownertrust.

Ultimately trust the imported key

This is so that I can encrypt data using my public key

gpg --edit-key [email protected]
gpg> trust
Your decision? 5 (Ultimate trust)

NOTE If I don't trust the public key then I see the following message when trying to encrypt something with it:

gpg: <key-id>: There is no assurance this key belongs to the named user
@AlKhrulev
Copy link

Thanks, this is very helpful!

@okineadev
Copy link

👍

@rizkiv1
Copy link

rizkiv1 commented May 10, 2025

For those using gpg4windows and using powershell especially powershell 1.0 (idk open source powershell would do), dont forget to convert files to unix mode.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment