#!/bin/sh # Copyright 2023 Helmut Grohne # SPDX-License-Identifier: MIT : <<'POD2MAN' =head1 NAME debvm-waitssh - Wait for a ssh server to be reachable =head1 SYNOPSIS B [I:]I =head1 DESCRIPTION B can be used to wait for a virtual machine with exposed ssh port to be reachable on that port. If no hostname is given, B is assumed. =head1 EXIT VALUES =over 8 =item B<0> The server is reachable. =item B<1> A timeout was reached before the server answered. =item B<2> Usage error. =back =head1 SEE ALSO debvm-run(1) =cut POD2MAN set -u case "${1:-}" in "") echo "usage: $0 " >&2 exit 2 ;; *:*) HOST=${1%:*} PORT=${1##*:} ;; *) HOST=localhost PORT=$1 ;; esac TOTALTIMEOUT=60 SCANTIMEOUT=10 SCANDELAY=1 now=$(date +%s) deadline=$((now + TOTALTIMEOUT)) while test "$now" -lt "$deadline"; do start=$now ssh-keyscan -T "$SCANTIMEOUT" -p "$PORT" "$HOST" >/dev/null 2>&1 && exit 0 now=$(date +%s) if test "$((now - start))" -lt "$SCANTIMEOUT"; then sleep "$SCANDELAY" now=$(date +%s) fi done exit 1