menu

ssh 점프호스트 (경유서버를 거쳐서 목적서버에 액세스하기)

목적서버에 로그인 하고자 할 때, 보안상 로컬에서 목적서버에 직접적으로 액세스 하지 않고 중간에 경유서버를 거쳐 액세스 하는 방법을 점프호스트라고 합니다.

해당 기능을 간단하게 사용하기 위한 로컬에서의 셋팅 방법에 대해 적어두고자 합니다(MAC OS).

공개키/비밀키에 대한 기본적인 구조를 알고 있는 것을 전제로 합니다.


ssh 설정 파일 구조
파일명 역할
~/.ssh/config ssh 설정 파일
~/.ssh/id_rsa 비밀키(public key)
~/.ssh/id_rsa.pub 공개키(private key)
~/.ssh/authorized_keys 공개키 모음(공개키의 내용이 텍스트로 나열되어 있음)
~/.ssh/known_hosts 과거에 사용한 서버 리스트


목적

로컬에서 커맨드 한줄로 경유서버를 거쳐 최종 목적서버까지 액세스 할 수 있도록 설정하는 것입니다.


로컬 : Macbook

서버 A : 경유서버 (유저명 : username1, 도메인 : aaa.com)

서버 B : 목적서버 (유저명 : username2, 도메인 : bbb.com)


위와 같은 구조인 경우, 점프 호스트를 이용하지 않으면 (로컬 -> 서버 A -> 서버 B)

# 로컬에서 하기의 커맨드로 경유서버에 접속
ssh username1@aaa.com

# 경유서버에서 하기의 커맨드로 목적서버에 접속
ssh username2@bbb.com

위와 같은 방법으로 로컬에서 목적서버에 액세스 할 수 있지만, 커맨드를 여러번 입력해야 하므로 귀찮습니다.(목적서버나 경유서버가 복수인 경우)

그래서 로컬에서 “ssh B” 라고 커맨드를 입력하면 바로 목적서버에 액세스 할 수 있도록 설정하겠습니다.(로컬 -> 서버 B)


셋팅

로컬의 ~/.ssh/config 파일을 다음과 같이 정의합니다.

# 경유서버
Host A
HostName aaa.com
User username1
IdentityFile ~/.ssh/id_rsa


# 목적서버
Host B
HostName bbb.com
User username2
ProxyCommand ssh -W %h:%p A
IdentityFile ~/.ssh/id_rsa
ServerAliveInterval 300

주의 : 비밀키는 로컬에만 가지고 있어야 하며, 서버에 공유해서는 안됩니다.


위에서 설정한 각각의 변수에 대해서 알아보겠습니다.

변수 의미
Host 서버 닉네임
HostName 서버 주소
User 서버에 접속가능한 유저명
ProxyCommand B에 접속할 시 일단 A를 경유하라는 뜻
IdentityFile 사용할 비밀키의 위치 지정
ServerAliveInterval 300초마다 시그널을 보내서 통신이 자동으로 끊기는 것을 방지


결과

위와 같이 셋팅을 끝내면, 다음과 같은 방법으로 접속이 가능해집니다.

로컬에서 경유서버에 로그인

ssh A

로컬에서 경유서버를 거쳐 목적서버에 로그인

ssh B



Written on June 26, 2019