|  | #!/bin/sh | 
|  |  | 
|  | # Shell script to install your public key on a remote machine | 
|  | # Takes the remote machine name as an argument. | 
|  | # Obviously, the remote machine must accept password authentication, | 
|  | # or one of the other keys in your ssh-agent, for this to work. | 
|  |  | 
|  | ID_FILE="${HOME}/.ssh/id_rsa.pub" | 
|  |  | 
|  | if [ "-i" = "$1" ]; then | 
|  | shift | 
|  | # check if we have 2 parameters left, if so the first is the new ID file | 
|  | if [ -n "$2" ]; then | 
|  | if expr "$1" : ".*\.pub" > /dev/null ; then | 
|  | ID_FILE="$1" | 
|  | else | 
|  | ID_FILE="$1.pub" | 
|  | fi | 
|  | shift         # and this should leave $1 as the target name | 
|  | fi | 
|  | else | 
|  | if [ x$SSH_AUTH_SOCK != x ] && ssh-add -L >/dev/null 2>&1; then | 
|  | GET_ID="$GET_ID ssh-add -L" | 
|  | fi | 
|  | fi | 
|  |  | 
|  | if [ -z "`eval $GET_ID`" ] && [ -r "${ID_FILE}" ] ; then | 
|  | GET_ID="cat ${ID_FILE}" | 
|  | fi | 
|  |  | 
|  | if [ -z "`eval $GET_ID`" ]; then | 
|  | echo "$0: ERROR: No identities found" >&2 | 
|  | exit 1 | 
|  | fi | 
|  |  | 
|  | if [ "$#" -lt 1 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]; then | 
|  | echo "Usage: $0 [-i [identity_file]] [user@]machine" >&2 | 
|  | exit 1 | 
|  | fi | 
|  |  | 
|  | # strip any trailing colon | 
|  | host=`echo $1 | sed 's/:$//'` | 
|  |  | 
|  | { eval "$GET_ID" ; } | ssh $host "umask 077; test -d ~/.ssh || mkdir ~/.ssh ; cat >> ~/.ssh/authorized_keys" || exit 1 | 
|  |  | 
|  | cat <<EOF | 
|  | Now try logging into the machine, with "ssh '$host'", and check in: | 
|  |  | 
|  | ~/.ssh/authorized_keys | 
|  |  | 
|  | to make sure we haven't added extra keys that you weren't expecting. | 
|  |  | 
|  | EOF | 
|  |  |