많은 서버를 한 번에 제어하는 방법 (tmux + Bash 스크립트)
Language

많은 서버를 한 번에 제어하는 방법 (tmux + Bash 스크립트)

뉴비뉴 2026. 4. 3.

 안녕하세요.

서버를 여러 대 운영하다 보면 "같은 명령어를 모든 서버에 동시에 실행하고 싶다"는 순간이 옵니다.

ssh 연결, 작업, 종료 이 작업을 반복하는 건 노가다 + 시간 낭비 입니다.

그래서 오늘은 tmux + Bash 스크립트로 한 번에 해결하는 방법을 정리했습니다.

시작하기 전에 (중요)

모든 서버에 SSH 접속이 가능해야 합니다

즉, 각 서버에 SSH 서버가 실행 중이어야 하고, 네트워크로 접근 가능해야 하며 키 인증이 되어 있어야 합니다

tmux란?

https://github.com/tmux/tmux

 

GitHub - tmux/tmux: tmux source code

tmux source code. Contribute to tmux/tmux development by creating an account on GitHub.

github.com

  • tmux는 쉽게 말해서 "터미널을 여러 개로 나눠서 동시에 작업"할 수 있게 해주는 툴 입니다
    • 여러 서버를 한 화면에서 관리 가능
    • 세션 유지 (SSH 끊겨도 복구 가능)
    • 입력을 여러 창에 동시에 전달 가능

목표

  • 여러 개의 서버에 동시에 접속
  • 명령어를 한 번만 입력
  • 모든 서버에서 동시에 실행

1. 여러 서버 동시에 접속

move_some_files.bash

SESSION="multi" # "multi" 대신 다른 이름 사용 가능
USER="root"

IPS=(
1.1.1.1
1.1.1.2
1.1.1.3
1.1.1.4
1.1.1.5
1.1.1.6
1.1.1.7
1.1.1.8
1.1.1.9
1.1.1.10
1.1.1.11
1.1.1.12
.
.
.
)

# 같은 이름의 세션이 존재하면 제거
# 2>/dev/null (세션이 없을 때 발생하는 에러를 무시)
tmux kill-session -t $SESSION 2>/dev/null

# "multi"라는 이름의 빈 세션이 백그라운드에서 생성됨
# -d: detach 모드 실행 (백그라운드에서 세션 생성)
# -s: 세션 이름 지정
tmux new-session -d -s $SESSION

# send-keys: $SESSION 세션에 키 입력 전송
# C-m: Carriage Return (Enter 키)
tmux send-keys -t $SESSION "ssh $USER@${IPS[0]}" C-m

# i=1부터 시작: 첫 번째 서버는 이미 pane으로 존재하므로 건너뜀
for ((i=1; i<${#IPS[@]}; i++))
do
  # $SESSION이 첫 번째 윈도우(0)를 분할
  # 각 분할은 새로운 pane이 됨
  tmux split-window -t $SESSION:0  
  
  # $SESSION을 "tiled" 레이아웃으로 배치
  # tiled는 모든 pane을 동일 크기로 정렬 
  tmux select-layout -t $SESSION tiled 
  
  # 새로운 pane에서 SSH 접속
  tmux send-keys -t $SESSION "ssh $USER@${IPS[$i]}" C-m
done

# 최종 화면 정렬
tmux select-layout -t $SESSION tiled

# 모든 pane에 입력 동기화 활성화
tmux setw -t $SESSION synchronize-panes on 
# tmux 세션에 접속 (포그라운드로 전환: 사용자 입력이 가능하게 함)
tmux attach -t $SESSION

2. 파일 배포 자동화

connect.bash

USER="user"
PASS="password"
FILE="something.tar.gz"
REMOTE_DIR="/home/tim"
INSTALL_DIR="/home/tim/install"

IPS=(...)

for IP in "$(IPS[@]}"
do
  # sshpass -p $PASS ssh ...: 자동 로그인용, 키 입력 없이 자동 실행, 대샹 서버 작업에 필수
  sshpass -p $PASS ssh -o StrictHostKeyChecking=no $USER@$IP \
  "mkdir -p $INSTALL_DIR"

  # scp 파일 전송
  sshpass -p $PASS scp -o StrictHostKeyChecking=no $FILE $USER@$IP:$REMOTE_DIR/

  sshpass -p $PASS ssh -o StrictHostKeyChecking=no $USER@$IP "
    cd $REMOTE_DIR &&
    tar -xzf $FILE &&
    cp -r target $INSTALL_DIR/
  "
done

3. 명령어 실행

./move_some_files.bash
./connect.bash

 

이렇게 하면 간단하게 위 사진처럼 20개의 터미널을 한 번에 띄워서 파일 전송과 명령어 실행을 동시에 처리할 수 있습니다.

처음에는 번거롭게 느껴질 수 있지만, 한 번 세팅해두면 이후 작업 속도가 확연히 달라집니다.

 

감사합니다.

댓글

💲 추천 글