Skip to content

Instantly share code, notes, and snippets.

@9point6
Last active September 18, 2025 18:01
Show Gist options
  • Save 9point6/ace9c7db75dc694d434d to your computer and use it in GitHub Desktop.
Save 9point6/ace9c7db75dc694d434d to your computer and use it in GitHub Desktop.
Keep retrying SSH connection until success (Useful for waiting for VMs to boot)
#!/usr/bin/env bash
# Check we've got command line arguments
if [ -z "$*" ] ; then
echo "Need to specify ssh options"
exit 1
fi
# Start trying and retrying
((count = 100))
while [[ $count -ne 0 ]] ; do
ssh $*
rc=$?
if [[ $rc -eq 0 ]] ; then
((count = 1))
fi
((count = count - 1))
done
# Print a message if we failed
if [[ $rc -ne 0 ]] ; then
echo "Could not connect to $* after 100 attempts - stopping."
fi
@wwwdeno027-pixel
Copy link

I have a slightly different method. My method always tries to reconnect you if you have a dirty disconnection: '~.' or 'Connection closed by remote host.' But if you disconnect with 'CRTL+D' or with 'exit' it just disconnects and show you some info of the connections.

/bin/bash

if [ -z "$1" ]; then echo '' && echo 'Please also provide server name as in config file...' && exit 1 fi

retries=0 repeat=true today=$(date)

while "$repeat"; do ((retries+=1)) && echo "Try number $retries..." && today=$(date) && ssh "$1" && repeat=false sleep 5 done

echo '' echo 'Disconnected sshx after a successful login.' echo "Total number of tries = $retries" echo '' echo 'Connected at:' echo "$today" echo ''

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment