summaryrefslogtreecommitdiff
path: root/sys-apps/propakey/files/propakey-0.0
blob: fc4ee16ed31db8b0861e428a487095065ebf29aa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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