Files
win-remote-toolkit/scripts/ssh/nirsoft-dump.sh
2026-04-24 17:44:02 +08:00

53 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
HOST="${HOST:-192.168.88.108}"
USER_NAME="${USER_NAME:-Admin}"
PASS="${PASS:-P@ssw0rd!}"
HERE="$(cd "$(dirname "$0")" && pwd)"
SCRIPT="$HERE/../powershell/nirsoft-dump.ps1"
DUMP_DIR="$HERE/dumps"
LOG_DIR="$HERE/../../logs"
STAMP="$(date +%Y%m%d-%H%M%S)"
LOG="$LOG_DIR/nirsoft-dump-${HOST}-${STAMP}.log"
mkdir -p "$DUMP_DIR" "$LOG_DIR"
SSH_OPTS=(-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=10)
echo "[*] Uploading nirsoft-dump.ps1 to $USER_NAME@$HOST"
sshpass -p "$PASS" scp "${SSH_OPTS[@]}" "$SCRIPT" \
"$USER_NAME@$HOST:C:/Users/$USER_NAME/nirsoft-dump.ps1" >/dev/null
echo "[*] Running dump on $HOST (this takes ~1-2 min), log -> $LOG"
OUT=$(sshpass -p "$PASS" ssh "${SSH_OPTS[@]}" "$USER_NAME@$HOST" \
"powershell -NoProfile -ExecutionPolicy Bypass -File C:/Users/$USER_NAME/nirsoft-dump.ps1" \
2>&1 | tee "$LOG")
REMOTE_ZIP=$(echo "$OUT" | grep '^DUMP_ZIP:' | awk '{print $2}' | tr -d '\r')
REMOTE_SIZE=$(echo "$OUT" | grep '^DUMP_SIZE:' | awk '{print $2}' | tr -d '\r')
if [[ -z "$REMOTE_ZIP" ]]; then
echo "[!] Could not find DUMP_ZIP line in output" >&2
exit 1
fi
# Convert Windows path to forward-slash form for scp + basename
REMOTE_ZIP_SCP=$(echo "$REMOTE_ZIP" | sed 's|\\|/|g')
LOCAL_ZIP="$DUMP_DIR/$(basename "$REMOTE_ZIP_SCP")"
echo ""
echo "[*] Pulling zip back: $REMOTE_ZIP_SCP (${REMOTE_SIZE} bytes) -> $LOCAL_ZIP"
sshpass -p "$PASS" scp "${SSH_OPTS[@]}" \
"$USER_NAME@$HOST:$REMOTE_ZIP_SCP" "$LOCAL_ZIP" >/dev/null
# Clean up remote copy
sshpass -p "$PASS" ssh "${SSH_OPTS[@]}" "$USER_NAME@$HOST" \
"del \"$REMOTE_ZIP\"" >/dev/null 2>&1 || true
echo ""
echo "[OK] Dump saved: $LOCAL_ZIP"
echo " Unzip with: unzip -l \"$LOCAL_ZIP\" (to list)"
echo " unzip \"$LOCAL_ZIP\" -d \"${LOCAL_ZIP%.zip}/\" (to extract)"