#!/bin/bash
#
# __copy1__
# __copy2__
#
CMD=$(basename $0)
CMDVER="1.6"
CMDSIG="$CMD v$CMDVER (2023-07-30)"

set -e -u


usage()
{
	echo "
== $CMD == add current pubkey ($keyfile) to remote server ~/.ssh/authorised_keys ==

usage: $CMD [options] system [ssh-options]

options:
  -k|--file file	use 'file' as keyfile, instead of ~/.ssh/$keyfile
  			shortened names are accepted (id_ and .pub can be omitted)

" >&2
	[ $# != 0 ] && echo -e "\n$*\n" >&2
	exit 1
}



# (MAIN)


sys=
port=
user=
keytype="ed25519"
keybits="2048"
keyfile="$HOME/.ssh/id_${keytype}.pub"
comment="$(id -u -n)@$(uname -n)"
use_keyfile=

while [ $# != 0 ]
do
  case $1 in
    -h|--help)	usage ;;
    -k|--file)	shift
    		[ $# = 0 ] && usage "--file requires an argument"
		use_keyfile=$1
		;;
    -*|"")	usage ;;
    *)		break ;;
  esac
  shift
done

[ $# = 0 ] && usage "missing system name"
sys=$1; shift

[ "X$use_keyfile" != "X" ] && {
	keyfile=
	use_keyfile=$(echo "$use_keyfile" | sed -e 's/\.pub//').pub
	for check in \
			$use_keyfile \
			$HOME/.ssh/$use_keyfile \
			id_$use_keyfile \
			$HOME/.ssh/id_$use_keyfile
	do
		[ -f "$check" ] && {
			keyfile=$check
			echo -e "\n using keyfile: $keyfile\n"
			break
		}
	done
	[ "$keyfile" = "" ] && {
		echo -e "\n$CMD error: can't find '$use_keyfile' keyfile\n" >&2
		exit 1
	}
}

[ -f $keyfile ] || {
	echo -e "\nWarning: public key file '$keyfile' not found"
	echo -e "We need to create one"
	echo -en "\nEnter your comment (email) or accept the default [$comment]: "
	read comment
	ssh-keygen -t $keytype -b $keybits -C "$comment" || exit 1
	echo -e "\npublic key created\n"
}



echo -e "$sys: adding public key ($keyfile) to remote authorized_keys ... "
cat $keyfile | ssh "$@" $sys \
        "mkdir ~/.ssh 2>/dev/null; cat >> ~/.ssh/authorized_keys; chmod 600 ~/.ssh/authorized_keys"

echo -e "$sys: checking (next try should not ask a password) ..."
ssh "$@" $sys echo "$sys: OK" || echo -e "\n(ouch! ... something was wrong)\n"

exit 0
