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.