리눅스에서 패스워드를 변경할 때 일반적으로 passwd 명령어를 입력한 후 새로운 패스워드를 두번 입력하는 방식을 사용하실 텐데요


자동화 스크립트 안에서는 이런 식의 대화형 쉘이 등장하면 골치 아프겠죠? 그래서 존재하는 옵션이 바로 Standard Input 입니다. 단 root 계정에서만 이 옵션을 사용할 수 있습니다.

passwd --stdin 계정

아래는 root 패스워드를 12345!@#$% 로 변경하는 모습입니다.


패스워드를 두번 입력 안해서 덜 귀찮고, 입력하는 패스워드가 눈에 보이기 때문에 실수 안해서 좋습니다. 뭐 보안상 취약하다고 할 수도 있겠지만요...

이제 한 걸음 더 나아가, 위 작업을 한줄로 처리하려면 어떻게 할까요? 바로 echo와 파이프 | 를 이용하는 것입니다.

echo '패스워드' | passwd --stdin 계정

아래는 한줄로 root 패스워드를 12345!@#$% 로 변경하는 모습입니다.


이처럼 echo와 passwd 명령어의 --stdin 옵션을 사용하면 패스워드 변경을 한줄로 처리할 수 있어, 자동화 스크립트에서 유용하게 활용할 수 있습니다. 이상입니다.
신고

  1. 환상경
    2012.09.13 23:02 신고

    대화형 프롬프트때문에 스크립트 작성이 어려우시다면
    Expect던가? 를 이용해보세요

  2. fourdimen
    2012.09.14 21:27 신고

    이렇게 한줄로 입력하는 것보다 그냥 passwd 하는것이 속도도 빠르고 , 보안성이 더 좋은 것 같은데요... 제 주관적인 생각이다만요... ^^

  3. BlogIcon Minty99
    2012.09.15 00:57 신고

    스누피님 질문드려요..ㅎㅎ
    윈도우8 ISO 파일에 드라이버 통합하고 Dism으로 WIM 언마운트 하려고 했는데
    이미지 파일: E:\Win8.wim
    이미지 색인: 1

    이거만 뜨고 진행이 안되네요..;;
    이거 무슨 문제일까요??
    마운트 할때는 상당히 빨랐습니다.

  4. BlogIcon mou eskimo
    2012.11.10 14:27 신고

    안되네요..;; Otherwise in most stores, you see either incomplete range of a brand or shortage of premium quality shoe brands. Various online shoe stores deal in BCBGen shoes, Betsey Johnson shoes or sadfsadfewqrweqrdfgda

  5. 박현종
    2013.12.01 02:41 신고

    안녕하세요?

    스누피님의 글 잘 보고 여러가지를 배워가는 서버 관리자 입니다.
    포스팅 글 잘 보았습니다.
    허나 저 방법은 안되는 경우도 있더라구요~ 그래서 다른 방법도 공유하려고 글을 써 봅니다.
    바로 echo 와 파이프라인 chpasswd 를 이용한 방법인데요~...
    echo "$id:$pw" | chpasswd > /dev/null 2>&1 뭐 이런식 입니다.
    물론 $가 붙었으니 변수(?)입니다.
    뭐 제가 운영하는 젠투서버에서 실 사용중인 스크립트 입니다.

    ::::::::::::::
    /usr/local/sbin/adduser
    ::::::::::::::
    #!/bin/bash

    echo "사용자 계정 생성 스크립트 입니다."
    echo "필드명을 정확히 확인후 작성 부탁드립니다."
    echo -n "성명 :"
    read nm
    echo -n "아이디 :"
    read id
    echo -n "비밀번호 :"
    read pw
    echo -n "연락처(휴대폰) :"
    read cn
    echo -n "생년월일 :"
    read bd
    echo -e "계정사용용도"
    echo -en " 1. 머드접속유지\r\n 2. 파일저장소\r\n 4. 머드게임개발\r\n 4. Web\r\n 5. 기타\r\n\r\n 선택
    하세요 : "
    read ty
    case $ty in
    1)
    echo -e "머드접속유지" > /data/admin/user_info/tmp.txt
    echo "/home/$id" > /data/admin/user_info/tmp2.txt
    ;;
    2)
    echo -e "파일저장소" > /data/admin/user_info/tmp.txt
    echo "/home/$id" > /data/admin/user_info/tmp2.txt
    ;;
    3)
    echo -e "머드게임개발" > /data/admin/user_info/tmp.txt
    echo "/home/$id" > /data/admin/user_info/tmp2.txt
    ;;
    4)
    echo -e "Web" > /data/admin/user_info/tmp.txt
    echo "/data/www/$id/" > /data/admin/user_info/tmp2.txt
    ;;
    5)
    echo -e "기타" > /data/admin/user_info/tmp.txt
    echo "/home/$id/" > /data/admin/user_info/tmp2.txt
    ;;
    *)
    echo "Warning : 잘못된 선택입니다."
    echo -n "Enter키를 눌러주세요"
    read
    ;;

    esac


    echo "수집한 정보로 계정을 생성합니다. 잠시만 기다려주세요....."
    in=/data/admin/user_info/$id
    touch $in
    echo -e "성명 : $nm" > $in
    echo -e "생년월일 : $bd" >> $in
    echo -e "연락처 : $cn" >> $in
    echo -e "계정사용용도 : $(cat /data/admin/user_info/tmp.txt)" >> $in
    useradd -m -d $(cat /data/admin/user_info/tmp2.txt) -c "$nm" $id
    /usr/local/sbin/sendlms-system $cn "'$nm'님 신청하신 '$id' 가 발급되었습니다. 계정접속 비밀번호는 '$pw' 입니다.
    접속후 passwd 명령어로 비밀번호를 변경해 주세요.."
    echo "$id:$pw" | chpasswd > /dev/null 2>&1
    echo "$nm님의 ID $id가 생성 완료 되었습니다."
    ln -sf /etc/tt.conf $(cat /data/admin/user_info/tmp2.txt)
    chown $id:$id $(cat /data/admin/user_info/tmp2.txt) -Rv > /dev/null 2>&1
    chmod 700 /data/admin/user_info/* > /dev/null 2>&1
    rm -rf /data/admin/user_info/tmp.txt > /dev/null 2>&1
    rm -rf /data/admin/user_info/tmp2.txt > /dev/null 2>&1

    이런식으로 젠투서버에서 자동화(?) 라기 보다는 걍 만들기 쉽게 만든 스크립트 에요~

    *** root 계정 이외의 나머지 계정들은 안되네요~ ㅠ

    • BlogIcon snpbox
      2013.12.01 22:00 신고
      수정 및 삭제

      아 chpasswd 좋네요. 감사합니다.
      passwd 명령어에 --stdin 옵션은 레드햇 계열만 있는 것 같습니다.
      우분투에 옵션이 없어서 아쉬웠는데 chpasswd가 좋은 대안이 되겠네요. 감사합니다.