# monkeysphere: Monkeysphere client tool
#
# The monkeysphere scripts are written by:
-# Jameson Rollins <jrollins@fifthhorseman.net>
+# Jameson Rollins <jrollins@finestructure.net>
# Jamie McClelland <jm@mayfirst.org>
# Daniel Kahn Gillmor <dkg@fifthhorseman.net>
# Micah Anderson <micah@riseup.net>
PGRM=$(basename $0)
-SYSSHAREDIR=${MONKEYSPHERE_SYSSHAREDIR:-"/usr/share/monkeysphere"}
+SYSSHAREDIR=${MONKEYSPHERE_SYSSHAREDIR:-"__SYSSHAREDIR_PREFIX__/share/monkeysphere"}
export SYSSHAREDIR
. "${SYSSHAREDIR}/defaultenv"
. "${SYSSHAREDIR}/common"
ssh-proxycommand HOST [PORT] monkeysphere ssh ProxyCommand
--no-connect do not make TCP connection to host
subkey-to-ssh-agent (s) store authentication subkey in ssh-agent
- sshfpr (f) KEYID output ssh fingerprint of gpg key
- keys-from-userid (u) USERID output valid keys for user id literal
+ keys-for-userid (u) USERID output valid ssh keys for given user id
+ sshfprs-for-userid USERID output ssh fingerprints for given user id
gen-subkey (g) [KEYID] generate an authentication subkey
--length (-l) BITS key length in bits (2048)
# user gpg command to define common options
gpg_user() {
- gpg --no-greeting --quiet --no-tty "$@"
+ LC_ALL=C gpg --fixed-list-mode --no-greeting --quiet --no-tty "$@"
}
# output the ssh fingerprint of a gpg key
gpg_ssh_fingerprint() {
keyid="$1"
- local tmpfile=$(mktemp)
-
- # trap to remove tmp file if break
- trap "rm -f $tmpfile" EXIT
-
- # use temporary file, since ssh-keygen won't accept keys on stdin
- gpg_user --export "$keyid" | openpgp2ssh "$keyid" >"$tmpfile"
- ssh-keygen -l -f "$tmpfile" | awk '{ print $1, $2, $4 }'
-
- # remove the tmp file
- trap - EXIT
- rm -rf "$tmpfile"
+ gpg_user --export "$keyid" --no-armor | "$SYSSHAREDIR/keytrans" openpgp2sshfpr "$keyid"
}
# take a secret key ID and check that only zero or one ID is provided,
case "$#" in
0)
- gpgSecOut=$(gpg_user --fixed-list-mode --list-secret-keys --with-colons 2>/dev/null | egrep '^sec:')
+ gpgSecOut=$(gpg_user --list-secret-keys --with-colons 2>/dev/null | egrep '^sec:')
;;
1)
- gpgSecOut=$(gpg_user --fixed-list-mode --list-secret-keys --with-colons "$1" | egrep '^sec:') || failure
+ gpgSecOut=$(gpg_user --list-secret-keys --with-colons "$1" | egrep '^sec:') || failure
;;
*)
failure "You must specify only a single primary key ID."
# check that a valid authentication key does not already exist
IFS=$'\n'
- for line in $(gpg_user --fixed-list-mode --list-keys --with-colons "$keyID") ; do
+ for line in $(gpg_user --list-keys --with-colons "$keyID") ; do
type=$(echo "$line" | cut -d: -f1)
validity=$(echo "$line" | cut -d: -f2)
usage=$(echo "$line" | cut -d: -f12)
# if authentication key is valid, prompt to continue
if [ "$validity" = 'u' ] ; then
echo "A valid authentication key already exists for primary key '$keyID'." 1>&2
- if [ "$PROMPT" = "true" ] ; then
+ if [ "$PROMPT" != "false" ] ; then
printf "Are you sure you would like to generate another one? (y/N) " >&2
read OK; OK=${OK:N}
if [ "${OK/y/Y}" != 'Y' ] ; then
# set unset default variables
GNUPGHOME=${GNUPGHOME:="${HOME}/.gnupg"}
KNOWN_HOSTS="${HOME}/.ssh/known_hosts"
-HASH_KNOWN_HOSTS="true"
+HASH_KNOWN_HOSTS="false"
AUTHORIZED_KEYS="${HOME}/.ssh/authorized_keys"
# unset the check keyserver variable, since that needs to have
export LOG_LEVEL
export LOG_PREFIX
+if [ "$#" -eq 0 ] ; then
+ usage
+ failure "Please supply a subcommand."
+fi
+
# get subcommand
COMMAND="$1"
-[ "$COMMAND" ] || (usage; exit 1)
shift
case $COMMAND in
# whether or not to check keyservers
CHECK_KEYSERVER=${MONKEYSPHERE_CHECK_KEYSERVER:=${CHECK_KEYSERVER:="true"}}
+ source "${MSHAREDIR}/update_known_hosts"
+
# if hosts are specified on the command line, process just
# those hosts
if [ "$1" ] ; then
'update-authorized_keys'|'update-authorized-keys'|'a')
# whether or not to check keyservers
CHECK_KEYSERVER=${MONKEYSPHERE_CHECK_KEYSERVER:=${CHECK_KEYSERVER:="true"}}
-
- # process authorized_user_ids file
- process_authorized_user_ids "$AUTHORIZED_USER_IDS"
+ source "${MSHAREDIR}/update_authorized_keys"
+ update_authorized_keys
;;
- 'import-subkey'|'i')
+ 'import-subkey'|'import'|'i')
source "${MSHAREDIR}/import_subkey"
import_subkey "$@"
;;
subkey_to_ssh_agent "$@"
;;
- 'sshfpr'|'f')
+ 'sshfpr')
+ echo "Warning: 'sshfpr' is deprecated. Please use 'sshfprs-for-userid' instead." >&2
gpg_ssh_fingerprint "$@"
;;
- 'keys-from-userid'|'u')
- keys_from_userid "$@"
+ 'keys-for-userid'|'u')
+ CHECK_KEYSERVER=${MONKEYSPHERE_CHECK_KEYSERVER:=${CHECK_KEYSERVER:="true"}}
+ source "${MSHAREDIR}/keys_for_userid"
+ keys_for_userid "$@"
+ ;;
+
+ 'sshfprs-for-userid')
+ CHECK_KEYSERVER=${MONKEYSPHERE_CHECK_KEYSERVER:=${CHECK_KEYSERVER:="true"}}
+ source "${MSHAREDIR}/keys_for_userid"
+ keys_for_userid "$@" | "$SYSSHAREDIR/keytrans" sshfpr
+ ;;
+
+ 'keys-from-userid')
+ echo "Warning: 'keys-from-userid' is deprecated. Please use 'keys-for-userid' instead." >&2
+ CHECK_KEYSERVER=${MONKEYSPHERE_CHECK_KEYSERVER:=${CHECK_KEYSERVER:="true"}}
+ source "${MSHAREDIR}/keys_for_userid"
+ keys_for_userid "$@"
;;
'version'|'--version'|'v')
*)
failure "Unknown command: '$COMMAND'
-Type '$PGRM help' for usage."
+Try '$PGRM help' for usage."
;;
esac