만약 회사에서 여러분이 관리하는 리눅스 서버 수백대의 패스워드를 전부 변경하라고 지시했다면 어떻게 하겠습니까? 그것도 전부 동일한 패스워드가 아니라 나름대로의 규칙을 따르는 패스워드로 말이죠. 이 글은 제가 생각해본 방법을 소개하면서, 여러 고수님들의 조언을 듣고자 포스팅하는 것입니다.

과제
1. 리눅스 서버 수백대의 root 패스워드를 전부 변경하시오.
2. 패스워드는 아래 규칙을 따릅니다.
- 앞 부분엔 !@#이 붙는다.
- 그 다음엔 각 서버 hostname의 끝 3자리가 들어간다.
- 마지막엔 sbox가 붙는다.

예를 들어 snoopyWeb01 이라는 서버의 경우 비밀번호는 아래와 같이 변경해야 합니다.
!@#b01sbox

일단 제가 생각한 명령어는 아래와 같습니다.

echo \!@#$(hostname | tail -c 4)sbox | passwd --stdin root


고수분들께 질문드리고 싶은 내용이 있는데 제가 처음에는 echo 다음에 ! 앞에 백슬러시를 안 붙여서 오류에 봉착했습니다. 그래서 여러가지 시도해본 결과 !가 수상해서 escape 시켜줬는데요, 리눅스에서 !가 하는 역할이 무엇인지 궁금합니다.

그리고 hostname의 뒤에서 3개의 문자를 잘라내기 위해 tail -c 4를 사용했는데, 왜 4를 넣어야 3개가 출력될까요? 예전에 자바 잠시 공부할 때 문자열 끝에 눈에 보이지는 않지만 문자열의 끝임을 나타내는 뭔가가 있다고 본 것 같은데 그거랑 관련이 있는건지 궁금하네요.

그리고 저처럼 리눅스를 처음 공부하시는 분들을 위해 한가지 알려드리자면
$(hostname | tail -c 4) 부분을 보면 $(명령어) 구조인데요, 동일한 역할을 `명령어` 도 합니다.
그래서 위 명령어를 아래와 같이 바꾸어도 무방합니다.

echo \!@#`hostname | tail -c 4`sbox | passwd --stdin root

그런데 저는 ` 기호보다 $괄호가 눈에 더 잘 들어오는 것 같습니다.


혹시 위 방법 외에 더 좋은 방법이 있다면 의견 주시면 고맙겠습니다.

요즘 회사에서 업무 특성상 윈도우 배치파일이나 리눅스 쉘스크립트를 짜야할 일이 많습니다. 아니 스크립트를 짜는게 업무는 아닌데, 단순 노가다 작업을 일일이 키보드로 입력하는게 싫어서 저는 웬만하면 스크립트로 만들려고 노력하고 있습니다. 워낙 바빠서 블로그 포스팅은 거의 못하고 있는데, 가끔씩 이렇게 배치파일이나 쉘스크립트에 대해 소개하도록 하겠습니다.