11305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#!/bin/sh
21305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
31305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# Shell script to install your public key on a remote machine
41305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# Takes the remote machine name as an argument.
51305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# Obviously, the remote machine must accept password authentication,
61305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# or one of the other keys in your ssh-agent, for this to work.
71305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
81305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodID_FILE="${HOME}/.ssh/id_rsa.pub"
91305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
101305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif [ "-i" = "$1" ]; then
111305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood  shift
121305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood  # check if we have 2 parameters left, if so the first is the new ID file
131305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood  if [ -n "$2" ]; then
141305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood    if expr "$1" : ".*\.pub" > /dev/null ; then
151305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood      ID_FILE="$1"
161305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood    else
171305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood      ID_FILE="$1.pub"
181305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood    fi
191305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood    shift         # and this should leave $1 as the target name
201305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood  fi
211305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodelse
221305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood  if [ x$SSH_AUTH_SOCK != x ] && ssh-add -L >/dev/null 2>&1; then
231305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood    GET_ID="$GET_ID ssh-add -L"
241305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood  fi
251305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi
261305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
271305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif [ -z "`eval $GET_ID`" ] && [ -r "${ID_FILE}" ] ; then
281305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood  GET_ID="cat \"${ID_FILE}\""
291305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi
301305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
311305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif [ -z "`eval $GET_ID`" ]; then
321305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood  echo "$0: ERROR: No identities found" >&2
331305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood  exit 1
341305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi
351305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
361305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif [ "$#" -lt 1 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
371305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood  echo "Usage: $0 [-i [identity_file]] [user@]machine" >&2
381305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood  exit 1
391305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi
401305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
411305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# strip any trailing colon
421305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodhost=`echo $1 | sed 's/:$//'`
431305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
441305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood{ eval "$GET_ID" ; } | ssh $host "umask 077; test -d ~/.ssh || mkdir ~/.ssh ; cat >> ~/.ssh/authorized_keys" || exit 1
451305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
461305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodcat <<EOF
471305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodNow try logging into the machine, with "ssh '$host'", and check in:
481305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
491305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood  ~/.ssh/authorized_keys
501305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
511305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodto make sure we haven't added extra keys that you weren't expecting.
521305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
531305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodEOF
541305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood
55