[Network]SSH ProxyJump

안진표·2024년 9월 3일

Network

목록 보기
1/1
post-thumbnail

이 글을 쓰게 된 이유

저는 현재 대학교 졸업 작품으로 웹 개발 프로젝트를 만들고 있습니다. 개발을 완료한 후, 제가 다니고 있는 연구실 서버에 이 서비스를 배포하려고 합니다. 연구실 서버는 게이트 역할을 수행하는 Bastion 서버와 그 안에 제가 서비스를 배포할 서버로 구성되어 있습니다. 그렇다면.... 배포를 하기 위해 Bastion 서버를 거쳐 배포할 서버로 이동하는 방법을 알아야 합니다. 이때 사용되는 개념인 Proxy 서버와 ProxyJump에 대해 공부를 진행하였습니다.

개요

본 게시물은 로컬 머신에서 목적지 서버로 접속할 때 사용하는 개념인 Proxy 서버에 대해 알아봅니다. 그리고 명령어를 통해 Proxy 서버를 접속하는 방법인 ProxyCommand, 마지막으로 ProxyJump 설정을 통해 간편하게 Proxy 서버를 경유해 목적지 서버를 접속하는 방법에 대해 알아보겠습니다.

Proxy 서버

Proxy 서버는 로컬 머신에서 목적지 서버로 접속하려 할 때, 그 사이에서 경유지 역할을 하는 서버를 의미합니다.

Proxy 서버를 사용하는 이유

직접 로컬 머신에서 목적지 서버로 접속을 하면되는데 번거롭게 Proxy 서버를 경유하여 목적지 서버로 접속을 하는지 궁금하실 겁니다. Proxy 서버를 사용 하는 이유는 다음과 같습니다.

  1. 보안 강화
    Proxy 서버는 외부에서 직접 내부로 접근하는 것을 차단하고, Proxy 서버를 통해서만 접근이 가능하도록 하여 보안을 강화할 수 있습니다. 예를 들어 특정 사용자나 IP 주소로만 목적지 서버로의 접속을 허용할 수 있습니다.

  2. 부하 분산
    Proxy 서버는 부하 분산 장치로도 사용될 수 있습니다. 예를 들어 여러 서버로의 요청을 Proxy 서버에서 받아 적절히 분배함으로써 서버의 부하를 줄이고 성능을 최적화할 수 있습니다.

SSH ProxyJump

ProxyJump이란?

  • ProxyJump는 SSH를 통해 중간 서버를 거쳐 최종 목적지 서버에 접속하는 방법입니다. 또한 중간 호스트를 통과하는 트래픽이 항상 종단 간 암호화가되도록 보장합니다. Open SSH 버전 7.5부터만 사용할 수 있으며, 중간 호스트에서 포트 포워딩을 지원해야합니다.

ProxyCommand

명령어를 통해 Proxy 서버를 경유해 목적지 서버로 접속할 수 있습니다. 이를 ProxyCommand라고 합니다.

형식은 다음과 같습니다.

ssh -J [Bastion Username]@[Bastion Address] [Target Username]@[Target Address]
  • -J 옵션: ProxyJump를 사용하겠다는 옵션

  • Bastion Username: 프록시 서버의 사용자명

  • Bastion Address: 프록시 서버의 호스트명 또는 IP 주소

  • Target Username: 목적지 서버의 사용자명

  • Target Address: 목적지 서버의 호스트명 또는 IP 주소

ProxyJump 설정

위와 같이 ssh 명령어(ProxyCommand)를 사용하여 ProxyJump를 할 수 있지만, ProxyJump 설정을 통해 보다 쉽게 접속이 가능합니다. 그 이유는 ProxyJump는 ProxyCommand을 래핑하고 있기 때문입니다.

그러면 ProxyJump 설정을 해보도록 하겠습니다.

형식
위치: ~/.ssh/config

Host [proxyjump server name]
	HostName [proxyjump host name] 
    Port [port number]
    IdentityFile [SSH key path]
	User user [proxyjump user name]


Host [target server name]
	HostName [target host name]
    Port [port number]
	User user [target user name]
    IdentityFile [SSH key path]
	ProxyJump [proxyjump server name]
  • IdentityFile: 사전에 등록한 SSH key가 저장된 경로를 작성

예시

Host bastion
	HostName bastion.example.com
    Port XXXX
    IdentityFile ~/~
	User user

Host final
	HostName final.example.com
    IdentityFile ~/~
	User user
	ProxyJump bastion

위와 같이 설정을 하면 다음처럼 손쉽게 목적지 서버로 접속이 가능합니다.

ssh final

실습

네 그럼 위의 내용을 바탕으로 실습을 진행해보겠습니다.

먼저 ProxyJump 설정 내용을 입력할 config 파일을 vim로 열어 줍니다.

다음으로 설정 내용을 입력해줍니다.

마지막으로 위 설정 내용을 저장한 후, ssh [target server hostname] 형식으로 접속을 합니다.

마치며

이번 시간에는 Proxy 서버의 역할과 개념, ProxyJump를 활용하는 방법에 대해 알아보았습니다. 본 게시물이 여러분들께 도움이 되었으면 좋겠습니다. 그리고 피드백 또한 환영입니다. 다음에는 "SSH ProxyJump를 활용한 GithubAction"이란 주제로 게시물을 작성할 예정입니다. 감사합니다.

profile
꾸준히 계속

6개의 댓글

comment-user-thumbnail
2024년 9월 3일

잘 읽었습니다.
실습 예제와 개요도가 함께 있으면 더 좋은글이 될 것 같아요!

1개의 답글
comment-user-thumbnail
2025년 4월 8일

SSH ProxyJump를 활용한 GithubAction 언제 나오나요

1개의 답글