Docker SSH 서버 설정 및 키 쌍 생성
이 단계에서는 원격 SSH 서버를 시뮬레이션하기 위해 Docker 컨테이너를 설정하고 호스트 머신에서 안전한 키 쌍을 생성합니다. 이 접근 방식은 클라이언트 (호스트) 와 서버 (Docker 컨테이너) 를 분리하여 보다 현실적인 환경을 제공합니다.
이 환경에는 이미 Docker 와 OpenSSH 클라이언트가 설치되어 있으므로 서버 구성으로 바로 진행할 수 있습니다.
먼저 Docker 서비스가 실행 중인지 확인합니다.
sudo systemctl start docker
sudo systemctl enable docker
이제 SSH 서버 역할을 할 Docker 컨테이너를 생성해 보겠습니다. Ubuntu 를 기본 이미지로 사용하고 SSH 서버 기능으로 구성할 것입니다. Dockerfile 을 생성합니다.
cat > Dockerfile << 'EOF'
FROM ubuntu:22.04
## OpenSSH 서버 및 기타 유틸리티 설치
RUN apt-get update && \
apt-get install -y openssh-server nginx sudo && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
## SSH 액세스를 위한 사용자 생성
RUN useradd -m -s /bin/bash sshuser && \
echo 'sshuser:password123' | chpasswd && \
usermod -aG sudo sshuser
## SSH 구성
RUN mkdir /var/run/sshd && \
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config && \
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config && \
sed -i 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/' /etc/ssh/sshd_config
## 사용자용 SSH 디렉토리 생성
RUN mkdir -p /home/sshuser/.ssh && \
chown sshuser:sshuser /home/sshuser/.ssh && \
chmod 700 /home/sshuser/.ssh
## SSH 포트 노출
EXPOSE 22 80
## SSH 서비스 시작
CMD ["/usr/sbin/sshd", "-D"]
EOF
Docker 이미지를 빌드합니다.
sudo docker build -t ssh-server .
호스트의 2222 번 포트를 컨테이너의 22 번 포트로 매핑하여 Docker 컨테이너를 실행합니다.
sudo docker run -d --name ssh-lab-server -p 2222:22 -p 8080:80 ssh-server
컨테이너가 실행 중인지 확인합니다.
sudo docker ps
실행 중인 컨테이너를 보여주는 출력이 표시되어야 합니다.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
... ssh-server "/usr/sbin/sshd -D" ... Up ... 0.0.0.0:2222->22/tcp, 0.0.0.0:8080->80/tcp ssh-lab-server
다음으로 SSH 키 쌍을 생성합니다. SSH 키는 비밀번호만 사용하는 것보다 서버에 SSH 로 로그인하는 더 안전한 방법을 제공합니다. 키 쌍은 비밀로 유지해야 하는 **개인 키 (private key)**와 공유할 수 있는 **공개 키 (public key)**로 구성됩니다.
ssh-keygen 명령을 사용하여 새 키 쌍을 생성합니다. 강력한 보안을 위해 키 유형을 rsa로, 키 크기를 2048 비트로 지정합니다. -f 플래그를 사용하면 키 파일을 지정할 수 있어 정리하는 데 도움이 됩니다. 키 이름을 ~/.ssh/id_rsa_lab_ssh로 지정합니다.
다음 명령을 실행합니다. 암호 구문 (passphrase) 을 입력하라는 메시지가 표시되면 Enter 키를 두 번 눌러 암호 구문 없이 진행합니다. 이 실습에서는 단순화를 위해 암호 구문을 생략하지만, 실제 시나리오에서는 개인 키를 보호하기 위해 항상 강력한 암호 구문을 사용해야 합니다.
ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa_lab_ssh
명령이 키 쌍을 생성하고 파일이 저장된 위치를 보여줍니다.
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/labex/.ssh/id_rsa_lab_ssh
Your public key has been saved in /home/labex/.ssh/id_rsa_lab_ssh.pub
The key fingerprint is:
SHA256:... labex@...
The key's randomart image is:
+---[RSA 2048]----+
| .o*+.. |
| . =.o. . |
| . o o. . |
| o . . |
| . S |
| . . . |
| o . |
| o . |
| E . |
+----[SHA256]-----+
키 파일이 생성되었는지 확인하려면 ~/.ssh 디렉토리의 내용을 나열할 수 있습니다. 새 개인 키 (id_rsa_lab_ssh) 와 공개 키 (id_rsa_lab_ssh.pub) 가 표시되어야 합니다.
ls -l ~/.ssh/id_rsa_lab_ssh*
출력은 다음과 유사하게 표시되며 두 개의 새 파일이 표시됩니다.
-rw------- 1 labex labex 1876 ... /home/labex/.ssh/id_rsa_lab_ssh
-rw-r--r-- 1 labex labex 401 ... /home/labex/.ssh/id_rsa_lab_ssh.pub
이제 SSH 서버를 성공적으로 설치하고 키 쌍을 생성했습니다. 다음 단계에서 이를 사용하여 보안 인증을 구성하고 테스트합니다.