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