#!/bin/bash

# set some default variables here
uname=
server=

if [ $# -lt 2 ];
    then
    scriptname=`basename $0`
    echo "usage: $scriptname <username> <server>"
    echo ""
    echo "author: jake hofman <gmail: jhofman>"
    exit 1
else
    uname=$1
    server=$2
fi

# generate key
# leave pass phrase blank
# this will generate some stuff in your home directory under ~/.ssh
if [ ! -e ~/.ssh/id_rsa.pub ];
    then
    echo "generating rsa key ... (leave passphrase blank)"
    ssh-keygen -t rsa
fi

# now we need to copy this over to your server
# first, make sure you have a .ssh directory (if one doesn't exist, create it)
echo
echo "creating ~/.ssh for $uname on $server if it doesn\'t exist (password required)"
ssh $uname@$server "bash -c 'if [ ! -d ~/.ssh ]; then mkdir ~/.ssh; fi'"

# now, a sneaky way to append your key to the end of authorized_keys2 on remote server
echo
echo "copying key to $server (password required)"
cat ~/.ssh/id_rsa.pub | ssh $uname@$server 'cat - >> ~/.ssh/authorized_keys2'

# finally, just set the correct permissions on the file you just appended to
echo
echo "setting permissions on $server (password not required ... if this worked)"
ssh $uname@$server 'chmod 600 ~/.ssh/authorized_keys2'

# tell user what we've done
echo
echo "keys have been exchanged. you can now ssh without enterting a password"

# note:
# ssh can be finicky as per permissions
# dave pennock and dan reeves point out the following recommended permissions:
#    cd ~; ls -ld . .ssh .ssh/authorized_keys
#      drwxr-xr-x  .
#      drwxr-xr-x  .ssh
#      -rw-r--r--  .ssh/authorized_keys
#