summaryrefslogtreecommitdiff
path: root/sys-apps/propakey/files/propakey-0.0
Side-by-side diff
Diffstat (limited to 'sys-apps/propakey/files/propakey-0.0') (more/less context) (ignore whitespace changes)
-rwxr-xr-xsys-apps/propakey/files/propakey-0.061
1 files changed, 61 insertions, 0 deletions
diff --git a/sys-apps/propakey/files/propakey-0.0 b/sys-apps/propakey/files/propakey-0.0
new file mode 100755
index 0000000..fc4ee16
--- a/dev/null
+++ b/sys-apps/propakey/files/propakey-0.0
@@ -0,0 +1,61 @@
+#!/bin/bash
+usage() {
+ echo
+ echo Usage: "${0}" "[options]" "[user@]host" "[identity-file]"
+ echo
+ echo " -h, --help, --usage display this text"
+ echo " -n <[user@]host>, --via <[user@]host>"
+ echo " establish connection via"
+ echo " specified account"
+ exit 1
+}
+gop=`getopt -o n:h --long via:,help,usage -n propakey -- "$@"`
+[ $? = 0 ] || usage
+eval set -- "${gop}"
+via=""
+while true ; do
+ case "$1" in
+ -n|--via) via="$2" ; shift 2 ;;
+ -h|--help|--usage) echo "usage" ; usage ;;
+ --) shift ; break ;;
+ *) echo "Huh" ; usage ;;
+ esac
+done
+
+dest="$1"
+[ -z "${dest}" ] && usage
+
+keyfile="${2}"
+if [ -e "${keyfile}.pub" ] ; then
+ keyfile="${keyfile}.pub"
+else
+ if [ -e "${HOME}/.ssh/${keyfile}.pub" ] ; then
+ keyfile="${HOME}/.ssh/${keyfile}.pub"
+ else
+ if [ ! -z "${keyfile}" ] ; then
+ echo "Identity file not found"
+ exit 2
+ fi
+ for f in ${HOME}/.ssh/{id_dsa,id_rsa,identity}.pub ; do
+ if [ -e $f ] ; then
+ keyfile="$f"; break;
+ fi
+ done
+ fi
+fi
+
+echo "Propagating ssh key to ${dest}"
+[ -z "${via}" ] || echo " via ${via}"
+echo "Using identity file '${keyfile}'"
+read kt k r <"${keyfile}"
+cmd="ssh ${dest} \
+ \"/bin/bash -c '\
+ umask 077 ;\
+ test ! -d .ssh && (mkdir .ssh || exit 1) ;\
+ ( test -r .ssh/authorized_keys && grep -q ${k} .ssh/authorized_keys </dev/null) || ( echo Installing ssh key ; cat >> .ssh/authorized_keys ) \
+ '\"" <"${keyfile}"
+if [ -z "${via}" ] ; then
+ eval ${cmd} <"${keyfile}"
+else
+ ssh ${via} ${cmd} <"${keyfile}"
+fi