-#!/bin/sh
+#!/bin/bash
# monkeysphere: MonkeySphere client tool
#
subcommands:
update-known_hosts (k) [HOST]... update known_hosts file
- update-userids (u) [USERID]... add/update userid
+ update-userids (u) [USERID]... add/update user IDs
+ remove-userids (r) [USERID]... remove user IDs
update-authorized_keys (a) update authorized_keys file
- gen-ae-subkey (g) KEYID generate an 'ae' capable subkey
+ gen-subkey (g) KEYID generate an 'a' capable subkey
help (h,?) this help
EOF
}
-# generate a subkey with the 'a' and 'e' usage flags set
-gen_ae_subkey(){
+# generate a subkey with the 'a' usage flags set
+# FIXME: this needs some tweaking to clean it up
+gen_subkey(){
local keyID
local gpgOut
local userID
- log "warning: this function is still not working."
-
keyID="$1"
- # set subkey defaults
- SUBKEY_TYPE=${KEY_TYPE:-"RSA"}
- SUBKEY_LENGTH=${KEY_LENGTH:-"1024"}
- SUBKEY_USAGE=${KEY_USAGE:-"encrypt,auth"}
-
gpgOut=$(gpg --fixed-list-mode --list-keys --with-colons \
"$keyID" 2> /dev/null)
# return 1 if there only "tru" lines are output from gpg
if [ -z "$(echo "$gpgOut" | grep -v '^tru:')" ] ; then
- log " key not found."
- return 1
+ failure "Key ID '$keyID' not found."
fi
- userID=$(echo "$gpgOut" | grep "^uid:" | cut -d: -f10)
-
- # set key parameters
- keyParameters=$(cat <<EOF
-Subkey-Type: $SUBKEY_TYPE
-Subkey-Length: $SUBKEY_LENGTH
-Subkey-Usage: $SUBKEY_USAGE
-Name-Real: $userID
+ # set subkey defaults
+ SUBKEY_TYPE=${SUBKEY_TYPE:-"RSA"}
+ #SUBKEY_LENGTH=${SUBKEY_LENGTH:-"2048"}
+ SUBKEY_USAGE=${SUBKEY_USAGE:-"auth"}
+ SUBKEY_EXPIRE=${SUBKEY_EXPIRE:-"0"}
+ cat <<EOF
+Please specify how long the key should be valid.
+ 0 = key does not expire
+ <n> = key expires in n days
+ <n>w = key expires in n weeks
+ <n>m = key expires in n months
+ <n>y = key expires in n years
EOF
-)
-
- echo "The following key parameters will be used:"
- echo "$keyParameters"
-
- read -p "generate key? [Y|n]: " OK; OK=${OK:=Y}
- if [ ${OK/y/Y} != 'Y' ] ; then
- failure "aborting."
- fi
-
- # add commit command
- keyParameters="${keyParameters}"$(cat <<EOF
-
-%commit
-%echo done
+ read -p "Key is valid for? ($SUBKEY_EXPIRE) " SUBKEY_EXPIRE; SUBKEY_EXPIRE=${SUBKEY_EXPIRE:-"0"}
+
+ # generate the list of commands that will be passed to edit-key
+ editCommands=$(cat <<EOF
+addkey
+7
+S
+E
+A
+Q
+$SUBKEY_LENGTH
+$SUBKEY_EXPIRE
+save
EOF
)
echo "generating subkey..."
- echo "$keyParameters" | gpg --batch --gen-key
+ echo "$editCommands" | gpg --expert --command-fd 0 --edit-key "$keyID"
}
########################################################################
AUTHORIZED_USER_IDS=${AUTHORIZED_USER_IDS:-"${MS_HOME}/authorized_user_ids"}
GNUPGHOME=${GNUPGHOME:-"${HOME}/.gnupg"}
KEYSERVER=${KEYSERVER:-"subkeys.pgp.net"}
-REQUIRED_KEY_CAPABILITY=${REQUIRED_KEY_CAPABILITY:-"e a"}
-USER_CONTROLLED_AUTHORIZED_KEYS=${USER_CONTROLLED_AUTHORIZED_KEYS:-"%h/.ssh/authorized_keys"}
+REQUIRED_HOST_KEY_CAPABILITY=${REQUIRED_HOST_KEY_CAPABILITY:-"e a"}
+REQUIRED_USER_KEY_CAPABILITY=${REQUIRED_USER_KEY_CAPABILITY:-"a"}
+USER_CONTROLLED_AUTHORIZED_KEYS=${USER_CONTROLLED_AUTHORIZED_KEYS:-"${HOME}/.ssh/authorized_keys"}
USER_KNOWN_HOSTS=${USER_KNOWN_HOSTS:-"${HOME}/.ssh/known_hosts"}
HASH_KNOWN_HOSTS=${HASH_KNOWN_HOSTS:-"true"}
failure "known_hosts file '$USER_KNOWN_HOSTS' is empty."
fi
log "processing known_hosts file..."
- process_known_hosts "$USER_KNOWN_HOSTS" "$hostKeysCacheDir"
+ process_known_hosts "$hostKeysCacheDir"
fi
;;
- 'update-userids'|'u')
+ 'update-userids'|'update-userid'|'u')
if [ -z "$1" ] ; then
failure "you must specify at least one userid."
fi
for userID ; do
update_userid "$userID" "$userKeysCacheDir"
done
+ log "Run the following to update your monkeysphere authorized_keys file:"
+ log "$PGRM update-authorized_keys"
+ ;;
+
+ 'remove-userids'|'remove-userid'|'r')
+ if [ -z "$1" ] ; then
+ failure "you must specify at least one userid."
+ fi
+ for userID ; do
+ remove_userid "$userID"
+ done
+ log "Run the following to update your monkeysphere authorized_keys file:"
+ log "$PGRM update-authorized_keys"
;;
'update-authorized_keys'|'update-authorized-keys'|'a')
failure "$AUTHORIZED_USER_IDS is empty."
fi
- # set user-controlled authorized_keys file path
- userAuthorizedKeys=${USER_CONTROLLED_AUTHORIZED_KEYS/\%h/"$HOME"}
-
# update authorized_keys
- update_authorized_keys "$msAuthorizedKeys" "$userAuthorizedKeys" "$userKeysCacheDir"
+ update_authorized_keys "$msAuthorizedKeys" "$USER_CONTROLLED_AUTHORIZED_KEYS" "$userKeysCacheDir"
;;
- 'gen-ae-subkey'|'g')
+ 'gen-subkey'|'g')
keyID="$1"
if [ -z "$keyID" ] ; then
- failure "you must specify keyid of primary key."
+ failure "You must specify the key ID of your primary key."
fi
- gen_ae_subkey "$keyID"
+ gen_subkey "$keyID"
;;
'help'|'h'|'?')