You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

44 lines
1.1 KiB

#!/bin/sh
pgp_id="7088C7421873E0DB97FF17C2245CAB70B4C225E9"
ssh_keygrip="149F16412997785363112F3DBD713BC91D51B831"
set -eu
check_bin() {
if ! which "$1" > /dev/null; then
echo "'$1' is not available" >&2
exit 1
fi
}
check_bin gpg
check_bin pinentry
echo "GPG and Pinentry located" >&2
if ! gpg -k "$pgp_id" > /dev/null 2> /dev/null; then
echo "Downloading public key" >&2
gpg --receive-keys "$pgp_id"
fi
if ! gpg -K "$pgp_id" > /dev/null 2> /dev/null; then
echo "Searching card for private keystubs" >&2
gpg --card-status
fi
if ! grep -q "pinentry-program" ~/.gnupg/gpg-agent.conf 2>/dev/null; then
echo "pinentry-program $(readlink -f "$(which pinentry)")" >> ~/.gnupg/gpg-agent.conf
fi
if ! grep -q "enable-ssh-support" ~/.gnupg/gpg-agent.conf 2>/dev/null; then
echo "enable-ssh-support" >> ~/.gnupg/gpg-agent.conf
fi
if ! grep -q "$ssh_keygrip" ~/.gnupg/sshcontrol 2>/dev/null; then
echo "$ssh_keygrip" >> ~/.gnupg/sshcontrol
fi
echo "GPG configured" >&2
gpgconf --kill gpg-agent
gpgconf --launch gpg-agent
gpg-connect-agent updatestartuptty /bye
echo "GPG Agent restarted" >&2