이 스크립트는 sudo 권한이 있는 관리자 계정으로 Linux/Unix 서버에 접속하여, 서버 내 모든 로그인 가능한 사용자 계정을 자동으로 탐지하고 패스워드를 일괄 변경하는 도구입니다.
/etc/passwd파일을 분석하여 로그인 가능한 계정 자동 탐지- 시스템 계정 및 서비스 계정 자동 필터링
- UID 기반 사용자 계정 식별 (UID ≥ 1000)
- 시스템 중요 계정 자동 보호
- 현재 관리자 계정 제외로 자기 차단 방지
- 사용자 지정 제외 계정 지원
- 한 번의 SSH 연결로 서버 내 모든 계정 처리
chpasswd명령을 이용한 일괄 변경- 각 계정별 실시간 검증
- 자동 모드: 10개 서버 동시 병렬 처리
- 대화형 모드: 순차 처리 (사용자 확인)
- 서버별/계정별 상세 처리 결과
- 실패 원인 분석 및 로깅
- 처리 시간 및 성능 지표 제공
- Python 3.6 이상
- Linux/Unix 대상 서버 (SSH 접근 가능)
pip install pandas paramiko- 대상 서버에 sudo 권한이 있는 계정
- SSH 접속이 가능한 네트워크 환경
- 저장소 클론 또는 파일 다운로드
# 스크립트 파일 다운로드
wget https://example.com/auto_password_changer.py- 필요한 라이브러리 설치
pip install pandas paramiko- 실행 권한 부여
chmod +x auto_password_changer.pyadmin_hosts.csv 파일을 생성하고 다음 형식으로 작성:
서버IP,접속포트번호,관리자계정명,관리자암호
192.168.1.10,22,root,admin123
192.168.1.11,2222,sudo_user,sudo456
10.0.0.100,22,admin,admin789대화형 모드 (기본)
python3 auto_password_changer.py배치 처리 모드 (-y 옵션)
python3 auto_password_changer.py -y # 10개씩 배치 처리
python3 auto_password_changer.py -y -b 5 # 5개씩 배치 처리
python3 auto_password_changer.py --yes --batch-size 20 # 20개씩 배치 처리도움말 보기
python3 auto_password_changer.py -h대화형 모드 (기본)
- 새 패스워드 입력 (2회 확인)
- 제외 계정 지정 (선택사항)
- 최종 진행 확인
- 서버별 처리:
- 계정 자동 탐지
- 변경할 계정 목록 확인
- 사용자 승인 후 일괄 변경
- 각 계정별 검증
배치 처리 모드 (-y 옵션)
- 새 패스워드 입력 (2회 확인)
- 배치별 처리:
- 지정된 수의 서버씩 그룹화
- 각 배치 처리 전 사용자 확인
- 배치 내 서버들은 동시 병렬 처리
- 개별 서버 내 모든 적격 계정 자동 변경
- 각 계정별 검증
- 다음 배치 진행 여부 확인
| 옵션 | 설명 |
|---|---|
-y, --yes |
계정별 확인 단계를 자동으로 승인 (배치 모드) |
-b, --batch-size |
동시에 처리할 서버 수 (기본값: 10) |
-h, --help |
도움말 표시 |
- 지정된 수의 서버를 동시 병렬 처리
- 각 배치 처리 전후로 사용자 확인
- 중간에 처리 중단 가능
- 개별 서버 내에서는 모든 계정 자동 변경
자동 계정 탐지 및 패스워드 일괄 변경 스크립트
==================================================
※ 이 스크립트는 sudo 권한이 있는 계정으로 접속하여
서버 내 모든 로그인 가능한 사용자 계정을 자동 탐지하고
패스워드를 일괄 변경합니다.
모든 계정에 적용할 새 패스워드를 입력하세요: ********
새 패스워드를 다시 입력하세요: ********
변경에서 제외할 계정이 있다면 입력하세요 (쉼표로 구분, 없으면 Enter):
제외 계정: backup_user, oracle
3개 서버에서 자동 계정 탐지 및 패스워드 변경을 시작합니다.
※ 각 서버별로 변경할 계정 목록을 확인받습니다.
계속 진행하시겠습니까? (y/n): y
[1/3] 서버 192.168.1.10:22 처리 중...
로그인 가능한 계정 탐지 중...
총 8개의 로그인 가능한 계정을 발견했습니다
변경 가능한 계정: 3개
서버 192.168.1.10:22에서 다음 계정들의 패스워드를 변경합니다:
--------------------------------------------------
- user1 (UID: 1001)
- user2 (UID: 1002)
- developer (UID: 1003)
총 3개 계정의 패스워드가 변경됩니다.
계속 진행하시겠습니까? (y/n): y
일괄 패스워드 변경 시작 (3개 계정)
✓ user1: 패스워드 변경 성공
✓ user2: 패스워드 변경 성공
✓ developer: 패스워드 변경 성공
서버 192.168.1.10:22: 패스워드 변경 검증 시작
✓ user1: 검증 성공
✓ user2: 검증 성공
✓ developer: 검증 성공
완료: 3/3 계정 성공
python3 auto_password_changer.py -y -b 5자동 계정 탐지 및 패스워드 일괄 변경 스크립트
==================================================
※ 이 스크립트는 sudo 권한이 있는 계정으로 접속하여
서버 내 모든 로그인 가능한 사용자 계정을 자동 탐지하고
패스워드를 일괄 변경합니다.
⚠️ 자동 확인 모드가 활성화되었습니다. (배치 크기: 5개)
각 배치별로 계속 진행할지 확인받습니다.
모든 계정에 적용할 새 패스워드를 입력하세요: ********
새 패스워드를 다시 입력하세요: ********
자동 모드로 15개 서버를 5개씩 배치 처리합니다.
처리 시작...
자동 확인 모드로 5개씩 배치 처리 중...
배치 1/3 (5개 서버):
- 192.168.1.10:22
- 192.168.1.11:22
- 192.168.1.12:22
- 192.168.1.13:22
- 192.168.1.14:22
배치 1을(를) 처리하시겠습니까? (y/n/q): y
배치 1 처리 중...
└ 192.168.1.10:22: 3/3 성공
└ 192.168.1.11:22: 2/2 성공
└ 192.168.1.12:22: 1/1 성공
└ 192.168.1.13:22: 4/4 성공
└ 192.168.1.14:22: 0/0 성공
배치 1 완료
다음 배치를 계속 처리하시겠습니까? (y/n): y
배치 2/3 (5개 서버):
- 192.168.1.15:22
- 192.168.1.16:22
- 192.168.1.17:22
- 192.168.1.18:22
- 192.168.1.19:22
배치 2을(를) 처리하시겠습니까? (y/n/q): y
배치 2 처리 중...
└ 192.168.1.15:22: 2/3 성공
└ 192.168.1.16:22: 1/1 성공
└ 192.168.1.17:22: 3/3 성공
└ 192.168.1.18:22: 2/2 성공
└ 192.168.1.19:22: 1/1 성공
배치 2 완료
다음 배치를 계속 처리하시겠습니까? (y/n): n
처리를 중단합니다.
======================================================================
자동 계정 탐지 및 패스워드 일괄 변경 작업 완료
======================================================================
전체 대상: 3개 서버
탐지된 로그인 계정: 24개
변경 대상 계정: 15개
서버 처리 결과:
- 완전 성공: 2개 서버
- 부분 성공: 1개 서버
- 완전 실패: 0개 서버
- 변경 대상 없음: 0개 서버
계정 처리 결과:
- 성공: 14개 계정 (93.3%)
- 실패: 1개 계정 (6.7%)
성능 지표:
- 평균 계정 탐지 시간: 2.1초
- 평균 서버 처리 시간: 28.7초
- 총 처리 시간: 1분 32초
상세 로그: auto_password_change_20240810_143022.log
상세 결과 파일: account_change_results_20240810_143022.txt
시스템 계정 (UID < 1000)
- 모든 시스템 계정 자동 제외
서비스 계정
root, daemon, bin, sys, sync, games, man, lp, mail, news, uucp,
proxy, www-data, backup, list, irc, gnats, nobody, systemd-network,
systemd-resolve, syslog, messagebus, uuidd, dnsmasq, sshd, mysql,
postgres, redis, mongodb, apache, nginx, tomcat, jenkins, docker,
kubernetes
현재 관리자 계정
- 접속에 사용된 관리자 계정은 자동 제외하여 자기 차단 방지
- 암호화된 통신: SSH만 사용 (telnet 제외)
- 패스워드 보안:
getpass모듈로 안전한 입력 - 권한 검증: sudo 권한 사전 확인
- 로그 보안: 패스워드 정보 로그 파일에 미기록
- 연결 관리: 적절한 타임아웃 설정
- 백업 권장: 패스워드 변경 전 계정 정보 백업
- 테스트 환경: 운영 환경 적용 전 테스트 환경에서 검증
- 네트워크 안정성: 안정적인 네트워크 환경에서 실행
- 권한 확인: sudo 권한이 올바르게 설정되어 있는지 확인
- 배치 크기 조정: 네트워크 환경에 맞는 적절한 배치 크기 설정
- 배치별 확인: 각 배치 처리 전 대상 서버 목록을 신중히 확인
- 중단 기능 활용: 예상치 못한 상황시 q 옵션으로 즉시 중단
.
├── auto_password_changer.py # 메인 스크립트
├── admin_hosts.csv # 서버 정보 (사용자 생성)
├── README.md # 이 파일
├── auto_password_change_YYYYMMDD_HHMMSS.log # 실행 로그
└── account_change_results_YYYYMMDD_HHMMSS.txt # 상세 결과
- 전체 실행 과정의 상세 로그
- 오류 및 디버깅 정보
- 서버별 처리 현황
- 서버별 상세 처리 결과
- 계정별 변경 성공/실패 상태
- 오류 원인 분석
Q: "sudo 권한이 없습니다" 오류가 발생합니다.
A: 다음을 확인하세요:
1. 접속 계정이 sudo 그룹에 속해 있는지 확인
2. /etc/sudoers 파일에서 NOPASSWD 설정 확인
3. sudo -l 명령으로 권한 확인
Q: SSH 연결이 실패합니다.
A: 다음을 확인하세요:
1. 서버 IP 주소와 포트 번호 확인
2. 방화벽 설정 확인
3. SSH 서비스 상태 확인
4. 네트워크 연결 상태 확인
Q: 일부 계정의 패스워드 변경이 실패합니다.
A: 다음을 확인하세요:
1. 계정이 잠겨있는지 확인 (passwd -S username)
2. 패스워드 정책 확인 (/etc/login.defs)
3. 계정 만료 상태 확인 (chage -l username)
Q: 검증 단계에서 실패합니다.
A: 다음을 확인하세요:
1. 새 패스워드가 정책에 맞는지 확인
2. 계정이 로그인 가능한지 확인
3. SSH 설정에서 패스워드 인증이 허용되는지 확인
성능 최적화
대량 서버 처리 시
- 배치 모드(-y): 배치 크기 조정 (기본 10개, -b 옵션으로 변경 가능)
- 네트워크 지연을 고려한 타임아웃 조정
- 로그 레벨 조정으로 성능 향상
- 배치별 진행 제어로 안정성 확보
이 소프트웨어는 MIT 라이센스 하에 제공됩니다.
버그 리포트, 기능 요청, 개선 제안은 이슈 트래커를 통해 제출해주세요.
-
v1.2.0 (2024-08-10): 배치 처리 모드 개선
--batch-size옵션 추가로 동시 처리 서버 수 설정 가능- 배치별 사용자 확인 기능 추가 (y/n/q 옵션)
- 처리 중단 기능 강화
- 더 세밀한 제어와 안전성 제공
-
v1.1.0 (2024-08-10): 자동 확인 모드 및 병렬 처리 추가
-y,--yes옵션 추가- 자동 모드에서 10개 서버 동시 병렬 처리
- 대화형 모드와 자동 모드 분리
- 명령행 인수 파싱 개선
- 처리 성능 크게 향상 (자동 모드시 약 80% 시간 단축)
-
v1.0.0 (2024-08-10): 초기 릴리스
- 자동 계정 탐지 기능
- 일괄 패스워드 변경
- 실시간 검증
- 상세 결과 보고