Skip to content

johnhsb/chpass

Repository files navigation

자동 계정 탐지 및 패스워드 일괄 변경 스크립트

개요

이 스크립트는 sudo 권한이 있는 관리자 계정으로 Linux/Unix 서버에 접속하여, 서버 내 모든 로그인 가능한 사용자 계정을 자동으로 탐지하고 패스워드를 일괄 변경하는 도구입니다.

주요 기능

🔍 자동 계정 탐지

  • /etc/passwd 파일을 분석하여 로그인 가능한 계정 자동 탐지
  • 시스템 계정 및 서비스 계정 자동 필터링
  • UID 기반 사용자 계정 식별 (UID ≥ 1000)

🛡️ 안전한 계정 관리

  • 시스템 중요 계정 자동 보호
  • 현재 관리자 계정 제외로 자기 차단 방지
  • 사용자 지정 제외 계정 지원

⚡ 효율적인 처리

  • 한 번의 SSH 연결로 서버 내 모든 계정 처리
  • chpasswd 명령을 이용한 일괄 변경
  • 각 계정별 실시간 검증
  • 자동 모드: 10개 서버 동시 병렬 처리
  • 대화형 모드: 순차 처리 (사용자 확인)

📊 상세한 결과 보고

  • 서버별/계정별 상세 처리 결과
  • 실패 원인 분석 및 로깅
  • 처리 시간 및 성능 지표 제공

요구사항

시스템 요구사항

  • Python 3.6 이상
  • Linux/Unix 대상 서버 (SSH 접근 가능)

Python 라이브러리

pip install pandas paramiko

권한 요구사항

  • 대상 서버에 sudo 권한이 있는 계정
  • SSH 접속이 가능한 네트워크 환경

설치

  1. 저장소 클론 또는 파일 다운로드
# 스크립트 파일 다운로드
wget https://example.com/auto_password_changer.py
  1. 필요한 라이브러리 설치
pip install pandas paramiko
  1. 실행 권한 부여
chmod +x auto_password_changer.py

사용법

1. CSV 파일 준비

admin_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

2. 스크립트 실행

대화형 모드 (기본)

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

3. 실행 단계

대화형 모드 (기본)

  1. 새 패스워드 입력 (2회 확인)
  2. 제외 계정 지정 (선택사항)
  3. 최종 진행 확인
  4. 서버별 처리:
    • 계정 자동 탐지
    • 변경할 계정 목록 확인
    • 사용자 승인 후 일괄 변경
    • 각 계정별 검증

배치 처리 모드 (-y 옵션)

  1. 새 패스워드 입력 (2회 확인)
  2. 배치별 처리:
    • 지정된 수의 서버씩 그룹화
    • 각 배치 처리 전 사용자 확인
    • 배치 내 서버들은 동시 병렬 처리
    • 개별 서버 내 모든 적격 계정 자동 변경
    • 각 계정별 검증
    • 다음 배치 진행 여부 확인

명령행 옵션

옵션 설명
-y, --yes 계정별 확인 단계를 자동으로 승인 (배치 모드)
-b, --batch-size 동시에 처리할 서버 수 (기본값: 10)
-h, --help 도움말 표시

🔄 배치 처리 모드 (-y 옵션)

  • 지정된 수의 서버를 동시 병렬 처리
  • 각 배치 처리 전후로 사용자 확인
  • 중간에 처리 중단 가능
  • 개별 서버 내에서는 모든 계정 자동 변경

실행 예시

대화형 모드

자동 계정 탐지 및 패스워드 일괄 변경 스크립트
==================================================
※ 이 스크립트는 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 계정 성공

배치 처리 모드 (-y 옵션)

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 권한 사전 확인
  • 로그 보안: 패스워드 정보 로그 파일에 미기록
  • 연결 관리: 적절한 타임아웃 설정

⚠️ 주의사항

  1. 백업 권장: 패스워드 변경 전 계정 정보 백업
  2. 테스트 환경: 운영 환경 적용 전 테스트 환경에서 검증
  3. 네트워크 안정성: 안정적인 네트워크 환경에서 실행
  4. 권한 확인: sudo 권한이 올바르게 설정되어 있는지 확인
  5. 배치 크기 조정: 네트워크 환경에 맞는 적절한 배치 크기 설정
  6. 배치별 확인: 각 배치 처리 전 대상 서버 목록을 신중히 확인
  7. 중단 기능 활용: 예상치 못한 상황시 q 옵션으로 즉시 중단

파일 구조

.
├── auto_password_changer.py          # 메인 스크립트
├── admin_hosts.csv                   # 서버 정보 (사용자 생성)
├── README.md                         # 이 파일
├── auto_password_change_YYYYMMDD_HHMMSS.log    # 실행 로그
└── account_change_results_YYYYMMDD_HHMMSS.txt  # 상세 결과

로그 파일

실행 로그 (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): 초기 릴리스

    • 자동 계정 탐지 기능
    • 일괄 패스워드 변경
    • 실시간 검증
    • 상세 결과 보고

⚠️ 경고: 이 도구는 시스템 보안에 중요한 영향을 미칠 수 있습니다. 사용 전 충분한 테스트를 수행하고, 운영 환경에서는 신중하게 사용하세요.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published