Get your GnuPG Public Key.
https://webinstall.dev/gpg-pubkey| Installer Source| Releases (json) (tab)
Get your GnuPG Public Key.
https://webinstall.dev/gpg-pubkey| Installer Source| Releases (json) (tab)
Your GnuPG Public Key can be used for signing git commits and email, among other things. The file public key ends in
.asc
.
This installs two commands.
gpg-pubkey
will:~/.gitconfig
for name and email)Downloads
foldergpg-pubkey-id
will output the id of your public key.The easiest way to get your GnuPG Public Key:
curl https://webi.sh/gpg-pubkey | sh
This is what the output of gpg-pubkey
looks like (except much longer):
GnuPG Public Key ID: CA025BC42F00BBBE
~/Downloads/john@example.com.gpg.asc:
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBGGLrUIBEAC+k1rHvi4xbCiN/cnh3Zi4rbKeJdPIWDP0wDhZcYzIN4/ZWVAm
... (several lines omitted for brevity)
nZH7UhxDx6Gu4w1+uef0E/cjz2BuEn/LN9UBGWwI5dLp5p03FeXYzzAwt6sh
=rRiF
-----END PGP PUBLIC KEY BLOCK-----
Note: Your public key is the entire section starting with and including
-----BEGIN
all the way to and including BLOCK-----
These are the files / directories that are created and/or modified with this install:
~/.config/envman/PATH.env
~/.local/bin/gpg-pubkey
~/.local/bin/gpg-pubkey-id
~/.gnupg/
~/Downloads/YOU.KEY_ID.gpg.asc
gpg-pubkey
into the formRun gpg-pubkey-id
to get your GnuPG Public Key ID and then update your
~/.gitconfig
to sign with it by default:
#!/bin/sh
MY_KEY_ID="$(
gpg-pubkey-id
)"
git config --global user.signingkey "${MY_KEY_ID}"
git config --global commit.gpgsign true
git config --global log.showSignature true
Or, for Windows users:
#!/usr/bin/env pwsh
$my_key_id = gpg-pubkey-id
git config --global user.signingkey "$my_key_id"
git config --global commit.gpgsign true
git config --global log.showSignature true
gpg
manuallyAll Secret Keys have Public IDs (and corresponding Public Keys).
Here's a command to list your secret key(s) and get the Public ID (of the first one, if you have many):
#!/bin/sh
MY_KEY_ID="$(
gpg --list-secret-keys --keyid-format LONG |
grep sec |
cut -d'/' -f2 |
cut -d' ' -f1
)"
echo "$MY_KEY_ID"
Or, for Windows users:
#!/usr/bin/env pwsh
$my_key_id = (
gpg --list-secret-keys --keyid-format LONG |
Select-String -Pattern '\.*sec.*\/' |
Select-Object Line |
ForEach-Object {
$_.Line.split('/')[1].split(' ')[0]
}
)
echo "$my_key_id"
Let's break that down, for good measure:
All secret keys have a Public Key and a Public ID, which can be viewed in LONG format:
gpg --list-secret-keys --keyid-format LONG
/Users/me/.gnupg/pubring.kbx
----------------------------
sec rsa3072/CA025BC42F00BBBE 2021-11-10 [SCEA]
6F848282295B19123748D36BCA025BC42F00BBBE
uid [ultimate] John Doe (mac.local) <john@example.com>
ssb rsa3072/674124162BF19A32 2021-11-10 [SEA]
The line with the Public Key ID is the one that starts with sec
:
sec rsa3072/CA025BC42F00BBBE 2021-11-10 [SCEA]
Specifically, it's the part just after the /
- CA025BC42F00BBBE, in this
case.
Note: It's important that you list the Secret Keys, because listing Public Keys will show all keys that you trust in your gpg keychain (co-workers, for example), not just keys that you own.
Here's how to copy your Public Key into your Downloads folder:
gpg --armor --export "${MY_KEY_ID}" > ~/Downloads/"${MY_EMAIL}".gpg.asc
Or, if you just want to print it to your console, run this:
gpg --armor --export "${MY_KEY_ID}"
Generally speaking you'll want to use the same name and email for git
and
gpg
.
Here's how you can automate creating a key using the same info as what's in your
~/.gitconfig
:
#!/bin/sh
MY_NAME="$( git config --global user.name )"
MY_HOST="$( hostname )"
MY_EMAIL="$( git config --global user.email )"
gpg --batch --generate-key << EOF
%echo Generating RSA 3072 key
Key-Type: RSA
Key-Length: 3072
Subkey-Type: RSA
Subkey-Length: 3072
Name-Real: ${MY_NAME}
Name-Comment: ${MY_HOST}
Name-Email: ${MY_EMAIL}
Expire-Date: 0
%commit
EOF
Or, for the Windows folk...
#!/usr/bin/env pwsh
$my_name = git config --global user.name
$my_host = hostname
$my_email = git config --global user.email
echo "
%echo Generating RSA 3072 key
Key-Type: RSA
Key-Length: 3072
Subkey-Type: RSA
Subkey-Length: 3072
Name-Real: $my_name
Name-Comment: $my_host
Name-Email: $my_email
Expire-Date: 0
%commit
" | gpg --batch --generate-key
Note: if you want to create a key without a passphrase, add
--pinentry=loopback --passphrase=''
to the arguments.
(though typically it's better to create a random passphrase and just let macOS store it in your user Keychain and forget it - just so it doesn't get backed up unencrypted, etc)