28 lines
780 B
Bash
Executable File
28 lines
780 B
Bash
Executable File
#!/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 <ip / hostname> [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
|