#!/bin/sh # howler: monkeysphere server gpg generator/publisher/maintainer # # Written by # Jameson Rollins # # Copyright 2008, released under the GPL, version 3 or later PGRM=$(basename $0) ######################################################################## # FUNCTIONS ######################################################################## usage() { cat <&2 exit ${2:-'1'} } # generate server gpg key gen_key() { KEY_TYPE=${KEY_TYPE:-RSA} KEY_LENGTH=${KEY_LENGTH:-2048} KEY_USAGE=${KEY_USAGE:-encrypt,auth} SERVICE=${SERVICE:-ssh} HOSTNAME_FQDN=${HOSTNAME_FQDN:-$(hostname -f)} USERID=${USERID:-"$SERVICE"://"$HOSTNAME_FQDN"} echo "key parameters:" cat < /dev/null 2>&1 ; then failure "key for '$USERID' already exists" fi echo "generating server key..." gpg --batch --gen-key < /dev/null | grep '^pub:' | cut -d: -f5) # dummy command so as not to publish fakes keys during testing # eventually: #gpg --send-keys --keyserver "$KEYSERVER" "$keyID" echo "gpg --send-keys --keyserver $KEYSERVER $keyID" } trust_key() { for keyID ; do # get the key from the key server gpg --keyserver "$KEYSERVER" --recv-key "$keyID" || failure "could not retrieve key '$keyID'" # edit the key to change trust # FIXME: need to figure out how to automate this, # in a batch mode or something. gpg --edit-key "$keyID" done } ######################################################################## # MAIN ######################################################################## # set ms home directory MS_HOME=${MS_HOME:-/etc/monkeysphere} # load configuration file MS_CONF=${MS_CONF:-"$MS_HOME"/monkeysphere.conf} [ -e "$MS_CONF" ] && . "$MS_CONF" GNUPGHOME=${GNUPGHOME:-"$MS_HOME"/gnupg} export GNUPGHOME KEYSERVER=${KEYSERVER:-subkeys.pgp.net} export KEYSERVER COMMAND="$1" [ "$COMMAND" ] || failure "Type '$PGRM help' for usage." shift 1 case $COMMAND in 'gen-key') gen_key ;; 'publish-key') publish_key ;; 'trust-key') if [ -z "$1" ] ; then failure "you must specify at least one key to trust." fi trust_key "$@" ;; 'help') usage exit ;; *) failure "Unknown command: '$COMMAND' Type '$PGRM help' for usage." ;; esac