Skip to content

Instantly share code, notes, and snippets.

@hongkongkiwi
Created March 13, 2020 05:06
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hongkongkiwi/5e9d1f9c92614772259606a3ced076ee to your computer and use it in GitHub Desktop.
Save hongkongkiwi/5e9d1f9c92614772259606a3ced076ee to your computer and use it in GitHub Desktop.
Add keys to known hosts file for a list of domains.
#!/usr/bin/env bash
SSH_SCAN_HOSTNAMES=${1:-"${SSH_SCAN_HOSTNAMES}"}
SSH_SCAN_HOSTNAMES=${SSH_SCAN_HOSTNAMES:-"github.com gitlab.com"}
SSH_DIR="$HOME/.ssh"
command -v ssh-keyscan >/dev/null 2>&1 || { echo >&2 "I require ssh-keygen but it's not installed. Aborting."; exit 1; }
command -v tee >/dev/null 2>&1 || { echo >&2 "I require tee but it's not installed. Aborting."; exit 1; }
for SSH_SCAN_HOSTNAME in $SSH_SCAN_HOSTNAMES; do
if [ ! -d "$SSH_DIR" ]; then
mkdir -p "${SSH_DIR}"
fi
if [ ! -f "$SSH_DIR/known_hosts" ]; then
touch "${SSH_DIR}/known_hosts"
chmod 600 "${SSH_DIR}/known_hosts"
fi
ESCAPED_HOSTNAME=`echo "$SSH_SCAN_HOSTNAME" | sed 's/\./\\./g'`
if ! grep -qE "^$ESCAPED_HOSTNAME" "${SSH_DIR}/known_hosts"; then
echo "Getting ssh-keys for $SSH_SCAN_HOSTNAME"
ssh-keyscan "${SSH_SCAN_HOSTNAME}" >> "${SSH_DIR}/known_hosts" || { echo >&2 "Failed to get key for $SSH_SCAN_HOSTNAME"; exit 1; }
else
echo "We already have the keys for $SSH_SCAN_HOSTNAME"
fi
done
echo "All Done!"
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment