parent
879f3fb0bf
commit
0cb372ee42
3 changed files with 79 additions and 2 deletions
@ -0,0 +1,75 @@ |
||||
# common useful functions |
||||
|
||||
w3m_safe() { |
||||
url="$1" |
||||
|
||||
output=$(/opt/homebrew/bin/w3m "$url" -M -cols 400 -graph -dump 2>&1) |
||||
|
||||
if echo "$output" | grep -q "Can't load"; then |
||||
return 2 |
||||
else |
||||
echo "$output" |
||||
return 0 |
||||
fi |
||||
} |
||||
|
||||
|
||||
# Returns: |
||||
# 0 = server reachable & command ran |
||||
# 1 = network/host-not-up-yet |
||||
# 2 = SSH auth failure (likely passphrase/key issue) -> caller should abort |
||||
is_server_up() { |
||||
host=$1 |
||||
|
||||
# Capture only stderr (order of redirs matters: 2>&1 >/dev/null) |
||||
err=$(/usr/bin/ssh \ |
||||
-o BatchMode=yes \ |
||||
-o PreferredAuthentications=publickey \ |
||||
-o ConnectTimeout=10 \ |
||||
-o ServerAliveInterval=20 \ |
||||
-o ServerAliveCountMax=3 \ |
||||
-o ConnectionAttempts=1 \ |
||||
-o StrictHostKeyChecking=no \ |
||||
-o UserKnownHostsFile=/dev/null \ |
||||
-o LogLevel=ERROR \ |
||||
-n -q "$host" 'uname -n || hostname' 2>&1 >/dev/null) |
||||
st=$? |
||||
|
||||
[ $st -eq 0 ] && return 0 |
||||
|
||||
# Normalize to lowercase for robust matching |
||||
err_lc=$(printf '%s' "$err" | tr '[:upper:]' '[:lower:]') |
||||
|
||||
case $err_lc in |
||||
*"permission denied"*|\ |
||||
*"no supported authentication methods available"*|\ |
||||
*"too many authentication failures"*|\ |
||||
*"agent admitted failure"*|\ |
||||
*"publickey authentication failed"*) |
||||
printf 'FATAL: SSH authentication failed for "%s": %s\n' "$host" "$err" >&2 |
||||
return 2 |
||||
;; |
||||
esac |
||||
|
||||
# Anything else (timeout, connection refused, kex read/reset, etc.) |
||||
return 1 |
||||
} |
||||
|
||||
wait_for_server_to_boot_up() { |
||||
server=$1 |
||||
while :; do |
||||
if is_server_up "$server"; then |
||||
printf '"%s" is up and running.\n' "$server" |
||||
return 0 |
||||
fi |
||||
rc=$? |
||||
if [ $rc -eq 2 ]; then |
||||
printf 'Aborting: SSH authentication failed for "%s" (likely passphrase needed or wrong key).\n' "$server" >&2 |
||||
exit 2 |
||||
fi |
||||
printf 'Server "%s" is not up\n' "$server" |
||||
sleep 10 |
||||
done |
||||
} |
||||
|
||||
# vim: set ts=4 sw=4 tw=0 noet ft=bash: |
||||
Loading…
Reference in new issue