#!/bin/bash SSH_DIR="${HOME}/.ssh" KNOWN_HOSTS="${SSH_DIR}/known_hosts" NEW_KNOWN_HOSTS="${KNOWN_HOSTS}..SWAP$$" BACKUP_KNOWN_HOSTS="${KNOWN_HOSTS}.old" if [ "$1" = "" ]; then echo "Usage: $0 [private key file for testing]" >&2 exit 1 fi REMOTE_HOST=$1 TEST_KEY=$2 # Here flock is used, because we might be adding multiple hosts at the # same time, resulting in race conditions on writing the known_hosts file. echo "Add the target host $REMOTE_HOST to $KNOWN_HOSTS" ( flock -e 200 touch $KNOWN_HOSTS (cat $KNOWN_HOSTS; ssh-keyscan $REMOTE_HOST 2>/dev/null) | sort | uniq > $NEW_KNOWN_HOSTS cp $KNOWN_HOSTS ${KNOWN_HOSTS}.bak cp $KNOWN_HOSTS $BACKUP_KNOWN_HOSTS mv $NEW_KNOWN_HOSTS $KNOWN_HOSTS ) 200>${KNOWN_HOSTS}..LCK exit 0