#!/bin/bash # Ssh keyfix version 2.0 if [ -z $1 ]; then echo "Usage: $0 user@host" echo "Installs your public ssh key to host, if neccesary" exit 1 fi if [ ! -f ~/.ssh/id_rsa ]; then ssh-keygen -N "" -b 2048 -t rsa -f ~/.ssh/id_rsa || exit 1 fi PUB="`cat ~/.ssh/id_rsa.pub`" || exit 1 echo -n "Checking ssh key on $1..." checkkey() { ssh $OPTS $1 " mkdir ~/.ssh &>/dev/null if ! grep '$PUB' ~/.ssh/authorized_keys &>/dev/null; then echo -n 'Installing public key...' echo '$PUB' >> ~/.ssh/authorized_keys fi" } checkkey $1 EXIT=$? #remove hostkey and retry if [ $EXIT == 255 ]; then TARGETHOST=`echo $1 | sed s/.*@//` echo -n "SSHKEYFIX: Removing hostkey of $TARGETHOST..." cat ~/.ssh/known_hosts | grep -v "^$TARGETHOST " > ~/.ssh/known_hosts.$$ || exit 1 mv ~/.ssh/known_hosts.$$ ~/.ssh/known_hosts || exit 1 echo "OK" checkkey $1 EXIT=$? fi if [ $EXIT == 0 ]; then echo "OK" exit 0 else echo "ERROR!" exit 1 fi