USER='user'
PASS='user'
ASKPASS=$(mktemp)
cat > "$ASKPASS" <<'EOF'
#!/bin/sh
printf '%s\n' "$SSH_AUTO_PASS"
EOF
chmod 700 "$ASKPASS"
export SSH_ASKPASS="$ASKPASS"
export SSH_ASKPASS_REQUIRE=force
export SSH_AUTO_PASS="$PASS"
export DISPLAY="${DISPLAY:-:0}"
mapfile -t LOCAL_IPS < <(ip -o -4 addr show | awk '{split($4,a,"/"); print a[1]}')
MYIP=$(ip -4 route get 1.1.1.1 | awk '{for(i=1;i<=NF;i++) if($i=="src"){print $(i+1); exit}}')
NET=$(printf '%s\n' "$MYIP" | cut -d. -f1-3)
is_local_ip() {
local ip="$1"
for local_ip in "${LOCAL_IPS[@]}"; do
[ "$ip" = "$local_ip" ] && return 0
done
return 1
}
for i in $(seq 1 254); do
ip="$NET.$i"
is_local_ip "$ip" && {
echo "SKIP LOCAL: $ip"
continue
}
echo "=== POWER OFF $ip ==="
yes "$PASS" | head -n 8 | timeout 12s setsid -w ssh -tt \
-o ConnectTimeout=3 \
-o ConnectionAttempts=1 \
-o StrictHostKeyChecking=accept-new \
-o NumberOfPasswordPrompts=1 \
-o PreferredAuthentications=password,keyboard-interactive \
-o PubkeyAuthentication=no \
"$USER@$ip" 'systemctl poweroff' 2>/dev/null
done
rm -f "$ASKPASS"
unset SSH_ASKPASS SSH_ASKPASS_REQUIRE SSH_AUTO_PASS