pussh - 병렬 SSH 명령 실행 도구
(github.com/bearstech)- Parallel SSH 세션을 통해 여러 서버에서 명령을 동시에 실행할 수 있는 CLI 도구
- 간단한 사용법부터 고급 입력/출력 제어까지 지원하며, 서버 클러스터 관리에 유용
기본 기능
- 여러 호스트에 명령 실행 하며, 호스트 이름을 프리픽스로 출력
- 예:
pussh -h host1,host2 uname -a
- 예:
- 호스트 목록은 파일 또는 표준 입력에서 제공 가능
- 예:
pussh -f servers uname -a
또는fetch-servers | pussh -f - uname -a
- 예:
- 출력을 파이프라인에 연결해 정렬하거나 필터링 가능
- 예: 디스크 사용량 기준으로 정렬 →
pussh -f servers df -h / | grep /dev | sort -rn -k5
- 예: 디스크 사용량 기준으로 정렬 →
- 각 호스트별 출력을 개별 파일로 저장 가능 (
%h
는 호스트 이름 자리)- 예:
pussh -f servers -o %h-hw.txt lshw
- 예:
- SSH 출력 결과를 다른 명령에 파이프 처리 가능
- 예:
pussh -f servers -o '|grep feature' command > output
- 예:
입력 제어 기능
- 명령 실행 시 입력을 파일이나 명령 출력으로 제공 가능
- 예:
pussh -f servers -i file command
- 예: 호스트별 입력 파일 →
pussh -f servers -i %h.data command
- 예: 동적 입력 →
pussh -f servers -i 'get-data %h|' command
- 예:
-
-i
와-o
는 자유롭게 조합 가능
배포 및 실행 기능
- 명령 또는 스크립트를 원격으로 전송 및 실행 가능
- 예:
pussh -f servers -u my-deploy.sh args ...
- 단, 실행 파일은 self-contained 형식이거나 대상 서버 환경과 호환되어야 함
- 예:
성능 최적화 팁
- SSH 연결 수립 속도가 전체 실행 시간에 큰 영향을 줌
- SSH agent의 처리 속도 한계를 초과하면 인증 실패나 연결 오류 발생 가능
- 권장: 실행 비율(rate)을 설정하여 사용 (예:
alias pussh='pussh -r 50'
) - 네트워크 지연이 큰 영향을 미치므로, 원격 LAN 머신에 ssh로 로그인 후 해당 머신에서 pussh 실행 시 더 빠름
- 예시 벤치마크 (Gigabit LAN 기준):
$ time pussh -f servers -r 100 date Total: 201 host(s), 4 second(s) real 0m4.069s user 0m7.132s sys 0m3.140s
- 예시 벤치마크 (Gigabit LAN 기준):
개발 및 역사
- 2008년부터 Bearstech 내부에서 사용되어 온 도구
- 초기에는 몇 줄의 셸 스크립트였으며, 현재는 500대 이상의 서버 클러스터에서도 안정적으로 동작함
- 클라우드 관리 시스템과 연동되어 단순한 호스트 설명으로부터 실행 가능한 호스트 리스트를 생성함
제한 사항
- 원격 서버의 stdout과 stderr가 구분되지 않고 한 스트림으로 합쳐져 출력됨
- 원격 서버에서 실행된 명령의 종료 상태(exit status)를 가져올 수 없음