더북(TheBook)

설치가 끝난 후 추가 자동화를 위한 셸 스크립트 처리

설치가 끝난 후 추가로 자동으로 해야 할 일이 있다면 미리 설정 파일에서 스크립트를 호출해서 처리할 수 있습니다. 앞서 pkgsel/include에서 openssh-server를 추가해서 SSH 서버를 설치했습니다. SSH 서버를 운영하려면 각 게스트에 손쉽게 접속하고 접속 과정에서 보안을 유지하기 위해서는 공개키 인증 시스템을 사용하는 편이 바람직합니다. 공개키 인증을 사용하기 위해 각 게스트마다 공개키를 저장하는 디렉터리를 생성하고, 적절한 권한을 설정한 후에, 자동 설치 서버인 호스트의 시스템 관리자 공개키를 게스트로 전송하는 과정이 필요합니다. 미리 설정 파일을 이용해서 이 과정을 자동화하는 방법을 살펴봅시다.

미리 설정 파일을 vi로 엽니다.

shinjaehun@losttemple:~$ sudo vi /var/www/preseed.cfg

설치 후 실행할 명령을 지정하는 preseed/late_command 항목을 다음과 같이 추가합니다. ‘\’로 구분된 각 행은 줄바꿈 없이 한 줄에서 이 명령을 처리한다는 사실을 의미합니다. in-target으로 시작하는 각 명령은 ‘;’로 구분되며 위에서 아래로 실행됩니다. 먼저 bash 셸을 변경(chsh -s /bin/bash ;)합니다. 호스트의 웹 서버에서 제공하는 ‘initialscript.sh’ 파일을 내려받습니다( wget http://192.168.122.1/initialscript.sh ;). 내려받은 ‘initialscript.sh’ 스크립트를 실행(sh initialscript.sh ; )합니다. 실행한 ‘initialscript.sh’를 삭제(rm initialscript.sh ;)합니다. 설정 내용을 저장하고 명령 프롬프트로 나옵니다.

d-i preseed/late_command string \
in-target chsh -s /bin/bash ; \
in-target wget http://192.168.122.1/initialscript.sh ; \
in-target sh initialscript.sh ; \
in-target rm initialscript.sh ;
Tip

여기에서는 미리 설정 파일 preseed/late_command에서 호스트의 웹 서버가 제공하는 셸 스크립트를 내려받도록 명령을 실행했지만 간단한 명령이라면 미리 설정 파일 내에서 직접 명령을 입력해도 됩니다.

각 게스트에 시스템 관리자의 공개키를 저장할 디렉터리를 만들고 공개키를 전송하는 셸 스크립트 ‘initialscript.sh’를 생성합니다. 셸 스크립트는 웹 서버를 통해 전송해야 하므로 웹 서버 루트 디렉터리에 저장해야 합니다.

shinjaehun@losttemple:~$ sudo vi /var/www/html/initialscript.sh

‘initialscript.sh’의 내용은 다음과 같습니다.

먼저 echo 명령으로 /etc/hosts에 호스트의 이름 정보를 추가합니다. 네트워크 호스트 이름을 관리하는 DNS를 사용할 수 없는 환경에서는 이렇게 /etc/hosts에 직접 이름 정보를 입력하는 수밖에 없습니다.

다음은 호스트의 공개키를 전송합니다. 자동 설치 후 추가되는 사용자 홈 디렉터리(/home/administrator)로 이동해서 .ssh 디렉터리를 생성하고 다시 .ssh 디렉터리로 이동합니다. 여기에 wget으로 호스트의 웹 서버에서 제공하는 시스템 관리자의 공개키(authorized_keys)를 받습니다. chmod 명령으로 내려받은 공개키의 접근 권한을 600으로 설정합니다. 입력이 끝나면 파일을 저장합니다.

#!/bin/bash

echo ‘192.168.122.1 losttemple.linuxmaster.com losttemple’ >> /etc/hosts

cd /home/administrator
mkdir .ssh
cd .ssh
wget http://192.168.122.1/authorized_keys
chmod 600 authorized_keys
Tip

호스트 시스템의 이름 정보를 losttemple이 아닌 ‘losttemple.linuxmaster.com’과 같이 완전한 도메인 주소 형식으로 입력합니다. 10장에서 살펴볼 시스템 자동 설정 도구와 12장에서 살펴볼 네트워크 백업 도구가 각 호스트 이름을 FQDN 형식으로 요구하기 때문입니다.

시스템 관리자의 공개키를 웹 서버 루트 디렉터리로 복사합니다. 시스템 관리자 계정의 공개키는 ‘공개키 인증 사용하기’에서 생성한 바 있습니다. 아직 공개키가 없다면 ssh-keygen 명령으로 생성해야 합니다.

shinjaehun@losttemple:~$ sudo cp .ssh/id_rsa.pub /var/www/html/authorized_keys

게스트에서 웹 브라우저를 통해서 공개키를 읽을 수 있어야 하므로 읽기 권한(644)을 부여합니다. 지금까지 게스트로 SSH 공개키를 어떻게 전달하는지 살펴봤습니다. 이렇게 미리 설정 파일에서 스크립트를 호출하는 방법을 응용해서 설치가 끝난 후 추가로 자동화해야 할 일을 처리할 수 있습니다.

shinjaehun@losttemple:~$ sudo chmod 644 /var/www/html/authorized_keys
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.