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


#!/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"