그동안 리눅스 서버는 Redhat 계열만 운영해 왔고, passwd 커맨드에 --stdin 옵션이 있었기 때문에 root 패스워드 대량 변경이나 자동화 스크립트 구현에 아무런 불편함이 없었다.

예제) echo 'new password' | passwd --stdin root

하지만 이번에 우분투(Debian 계열) 서버를 만져보면서 passwd 커맨드에 --stdin 옵션이 없다는 사실을 알고 나서는 매우 당혹스러웠다. 그런데 댓글로 chpasswd 커맨드를 알려주신 분이 계셔서 다시금 희망을 찾게 되었다.

chpasswd 커맨드는 Standard Input을 패스워드로 입력받을 수 있기 때문에 보안상 취약할 수도 있지만, 사실 root 권한을 가진 서버관리자 입장에서는 매우 편리하다.

다음은 Standard Input을 활용한 몇가지 예제이다. '계정:새로운패스워드' 형식으로 입력하면 된다.
root, snoopy, test01 사용자의 패스워드를 1234로 변경해 보겠다.

1. 그냥 키보드로 입력

chpasswd
root:1234
snoopy:1234
test01:1234

입력 종료는 Ctrl + D 누르면 된다.

2. echo와 파이프 활용

echo 'root:1234' | chpasswd
echo 'snoopy:1234' | chpasswd
echo 'test01:1234' | chpasswd

가독성은 좋지 않으나 echo에 -e 옵션을 주고 \n으로 개행 처리하여 한 줄로 할 수도 있다.

echo -e 'root:1234\nsnoopy:1234\ntest01:1234' | chpasswd

3. 텍스트 파일로부터 입력

미리 패스워드를 텍스트 파일에 적어놓고

password.txt
root:1234
snoopy:1234
test01:1234

아래와 같이 처리하면 되겠다.

cat password.txt | chpasswd

또는

chpasswd < password.txt