본문 바로가기

Server/Docker

[Docker]SSH 접속 프로그램을 통해 컨테이너 접속하기

Docker에 Linux Container를 올린 후, SSH 접속 프로그램(=Putty)를 통해 접속하는 방법을 알아보도록 하겠습니다.


리눅스 관련 이미지 받기

우선 Docker Hub에서 리눅스 OS와 관련된 이미지(CentOS / Ubuntu)를 다운 받아야 합니다. 저는 Ubuntu 이미지를 다운 받아 실행하였습니다.

docker search ubuntu 명령어를 통해 ubuntu와 관련된 이미지들을 확인합니다.

이 중, STARS가 가장 많고 OFFICIAL 항목이 [OK]인 이미지는 공식적인 이미지이며, 신뢰성 있는 이미지입니다.

그럼 docker pull ubuntu 명령어를 통해 최상단의 ubuntu 이미지를 다운 받습니다.

 

docker images 명령어를 통해 이미지 목록을 확인합니다.


리눅스 컨테이너 생성하기

docker run -itd --name {컨테이너 명} -p {외부 접속 포트 : 컨테이너 포트 포워딩 포트} {이미지 명}

(ex. docker run -id -name swenti-crawling -p 32777:22 ubuntu)

  • run: 컨테이너 생성 및 실행
  • -d: 데몬 프로세스로 실행, 프로세스가 끝나도 유지. 즉, 백그라운드에서 실행
  • -i: 사용자가 입/출력할 수 있는 상태
  • -t: 가상 터미널 환경 활성화
  • -p: 포트 설정. 32777:22의 경우 외부에서 docker의 32777 포트로 접속 시 해당 컨테이너의 22번 포트로 포트 포워딩
  • --name: 컨테이너 이름 설정

컨테이너를 성공적으로 생성하였다면, 잘 생성되었는지 확인 해봅시다.

 

docker ps -a 명령어로 모든 컨테이너들을 출력해봅시다.


SSH 접속을 위한 작업

이제 접속하는 서버의 포트를 개방해야 외부에서 Putty를 통해서 접속할 수 있습니다.

그럼, Teminal(MacOS) 혹은 CMD, Powershell(Windows) 에서 아래 명령어를 통해 포트를 개방해줍시다.

 

sudo ufw allow 32777 (MacOS)

 

netsh advfirewall firewall add rule name"Allow Port 32777" dir=in action=allow protocol=TCP localport=32777 (Windows)

 

 

외부에서 접속하기 위한 작업이 끝났다면, 컨테이너 내부에도 작업을 해주어야 합니다.

docker exex -it swenti-crawling bash (bash 작업으로 컨테이너 내부에 접속하기)

 

 

컨테이너에 성공적으로 접속하셨다면 apt update && apt install net-tools vim openssh-server ufw명령어로 모듈을 설치 합니다.

 

 

그리고, Putty를 통해 root 계정으로 접속을 시도하기 위해 vi /etc/ssh/sshd\_config명령어를 통해 /etc/ssh/sshd_config 파일을 수정합니다.

 

PermitRootLogin 옵션에 대한 주석을 해제하고 값을 yes로 설정합니다.

이제 컨테이너 내부의 작업이 끝났습니다.

service ssh start 혹은 service ssh restart 명령어를 통해 ssh를 시작해주겠습니다.


컨테이너 접속하기

이제 Putty를 켜서 다음과 같이 설정해줍니다.

  • HostName: localhost
  • Port: 32777

그럼 성공적으로 컨테이너에 접속할 수 있게 됩니다.