#!/bin/bash
# Использование: ./collect_packages.sh servers.txt user password
# servers.txt: строки вида имя:ip
SERVERS_FILE="$1"
SSH_USER="$2"
SSH_PASS="$3"
OUT_DIR="packages_report"
mkdir -p "$OUT_DIR"
COMBINED="$OUT_DIR/all_servers.csv"
echo "server,package,version" > "$COMBINED"
while IFS=: read -r NAME IP; do
[ -z "$NAME" ] && continue
echo "=== $NAME ($IP) ==="
DPKG_OUT=$(sshpass -p "$SSH_PASS" ssh \
-o PreferredAuthentications=password,keyboard-interactive \
-o PubkeyAuthentication=no \
-o StrictHostKeyChecking=no \
-o ConnectTimeout=10 \
"$SSH_USER@$IP" "dpkg -l" < /dev/null)
echo "package,version" > "$OUT_DIR/$NAME.csv"
echo "$DPKG_OUT" | awk '/^ii /{print $2","$3}' >> "$OUT_DIR/$NAME.csv"
echo "$DPKG_OUT" | awk -v s="$NAME" '/^ii /{print s","$2","$3}' >> "$COMBINED"
done < "$SERVERS_FILE"