실행 목적
서버 리스트를 통한 일괄적인 명령어 실행 후 결과값을 result 파일에 저장
실제 경로 내 파일
[ph702@DA-CC-SC02 command]$ ls
list result script
실행 순서
- list 파일 내에 서버 IP 기입
- ./script '(명령어)' 입력
- ex) ./script 'df -h'
작성 내용
#!/bin/bash
SCRIPT_DIR=$(dirname "$0")
list="$SCRIPT_DIR/list"
# list 파일 확인
if [ ! -f $list ]; then
echo "list 파일을 생성해주세요."
exit 1
fi
if [ ! -s $list ]; then
echo "list 안에 server ip를 확인해주세요."
exit 1
fi
# 명령어 확인
if [ $# -lt 1 ]; then
echo "명령어를 확인해주세요"
exit 1
fi
COMMAND=$*
C=0
S=$(cat $list | wc -l)
# 사용자 정보
echo -n "계정 ID를 입력해주세요: "
read USERNAME
echo -n "패스워드를 입력해주세요: "
read -s PASSWORD
echo
# 결과 파일
OUTPUT_FILE="result"
> "$OUTPUT_FILE"
for i in $(cat $list); do
if [ "$(echo $i | grep -c '#')" -eq 0 ]; then
C=$((C+1))
echo "====== $C / $S ======="
echo "$i:$COMMAND"
echo "====== $i ======" >> "$OUTPUT_FILE"
# SSH 실행 + 출력 제거 + 출력 기반 타임아웃 적용
sshpass -p "$PASSWORD" ssh -o StrictHostKeyChecking=no -t "$USERNAME@$i" \
"bash -c \"$COMMAND\"" 2>&1 \
| grep -v "Connection to" \
| (
while IFS= read -r -t 1 line; do
echo "$line" >> "$OUTPUT_FILE"
done
# read -t 가 timeout (출력멈춤) → SSH 종료
pkill -P $$ ssh 2>/dev/null
)
echo "" >> "$OUTPUT_FILE"
echo " $i 서버의 명령어 실행 결과를 $OUTPUT_FILE에 저장하였습니다."
fi
done
echo "명령어 실행이 완료되었습니다."'리눅스' 카테고리의 다른 글
| [ISP 확인] IP에 해당하는 ISP(인터넷 서비스 제공자) 확인 (0) | 2025.12.05 |
|---|---|
| sed 스크립트 (0) | 2025.04.10 |
| IP 추출 스크립트 (0) | 2025.04.10 |
| [인증 기간 확인] SSL 인증 체크 스크립트 (0) | 2025.04.03 |