blob: 092b46f8c2671f023bb1d6c6cd608cbdca13348a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
#!/bin/sh
# Copyright 2023 Helmut Grohne <helmut@subdivi.de>
# SPDX-License-Identifier: MIT
: <<'POD2MAN'
=head1 NAME
debvm-waitssh - Wait for a ssh server to be reachable
=head1 SYNOPSIS
B<debvm-waitssh> [I<hostname>:]I<port>
=head1 DESCRIPTION
B<debvm-waitssh> 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<localhost> 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 <port>" >&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
|