개발로 자기계발
728x90

SSH 터널링

SSH(Secure Shell) 프로토콜을 사용하여 네트워크 상의 다른 컴퓨터와 안전하게 통신할 수 있는 방법이다.

 

주로 두 가지의 유형이 있는데

1. 로컬 포트 포워딩

2. 리모트 포트 포워딩

 

현재 글에서는 로컬 포트 포워딩으로 진행될 것이다.

서버는 EC2의 서버가 될 것이고, 데이터베이스는 RDS가 될 것이다.

서버는 Ubuntu를 사용 중이다.

 

설치

1) 라이브러리 설치

pip install sshtunnel

 

2) 라이브러리 import

from sshtunnel import SSHTunnelForwarder

 

3) Setting.py의 Database섹터에 SSH 터널 설정

server = SSHTunnelForwarder(
    (Environ.SSH_TUNNEL_HOST, Environ.SSH_TUNNEL_PORT),
    ssh_username=Environ.SSH_TUNNEL_USERNAME,
    ssh_pkey=Environ.SSH_TUNNEL_PKEY,
    remote_bind_address=(Environ.RDS_HOST, Environ.RDS_PORT)
)

SSH_TUNNEL_HOST: EC2 퍼블릭 주소(탄력적 IP를 받아서 기입했다.)
SSH_TUNNEL_PORT: EC2 서버 포트
SSH_TUNNEL_USERNAME: EC2 서버의 이름
SSH_TUNNEL_PKEY: EC2를 생성할 때 받았 던 .pem 파일의 경로
remote_bind_address: RDS의 엔드포인트와 포트

 

4) SSH 터널 시작

server.start()

 

5) 데이터베이스 설정

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': Environ.RDS_DB_NAME,
        'USER': Environ.RDS_USERNAME,
        'PASSWORD': Environ.RDS_PASSWORD,
        'HOST': '127.0.0.1',
        'PORT': server.local_bind_port,
    }
}

RDS_DB_NAME: 기본 스키마 이름
RDS_USERNAME: RDS를 만들 때 생성한 어드민 이름
RDS_PASSWORD: RDS를 만들 때 생성한 어드민 패스워드
HOST: 로컬 주소
PORT: 로컬 포트로 터널링 된 포트 사용

 

728x90
SMALL
profile

개발로 자기계발

@김잠봉

틀린부분이나 조언이 있다면 언제든 환영입니다:-)