Here’s a little trick. Ssh-keyscan is useful for asking ssh daemons for their host keys. People use it to provision their known_hosts file.
You can also use it to poll a ssh daemon – very use when waiting for a new server to boot up, including cloud servers. That might look like this:
LOG waiting for sshd and get hostkey
while echo ".." ; do
HOSTKEY="$( ssh-keyscan -T 20 $IP 2> /dev/null )"
if [[ ouch != "ouch$HOSTKEY" ]] ; then
echo "$HOSTKEY"
break
fi
done
LOG Add $NAME to known_hosts
cp ~/.ssh/known_hosts ~/.ssh/known_hosts.old
sed "/^$IP /d" ~/.ssh/known_hosts.old > ~/.ssh/known_hosts
echo "$HOSTKEY" >> ~/.ssh/known_hosts
That code is too optimistic, it assumes that the server will start.
And also: there are scenarios where ssh’s timeout parameters don’t work right. So you can hang, inspite of that -T timeout. Fixing that requires getting fresher versions of sshd.