외부접속 안되는 환경에서 SSH 역터널링으로 접속하기

Table of Content

상황

Destination 서버는 어떤 시설내부에 사설 IP를 할당받기 때문에 외부에서 접근 불가능한 상황이다.이 상황에서 클라이언트가 외부 서버에 접근하기 위해선 중간에 외부 접속 가능한 IP를 갖고 있는 중계서버가 필요하다.

클라이언트는 중계자 역할을 하는 Jump Server로 접속하고 Jump Server는 최종 목적지인 Destination Server로 접속을 돌리면 된다.
Imgur

Jump Server -> Destination Server

Destination Server에서 외부 접속이 가능한 Jump Server로 리버스 터널링을 한다.

아래 명령어를 Destination Server에서 실행한다. 명령어가 의미하는 바는 Jump Server(aaa.aaa.aaa.aaa)의 22222번 포트를 Remote인 127.0.0.1 즉, Destination Server 자신의 22번 포트를 연결하겠다는 의미이다.

ssh -nNT -o TCPKeepAlive=yes -R 22222:127.0.0.1:22 userA@aaa.aaa.aaa.aaa

그러면 아래처럼 Jump Server에서 localhost 주소로 22222번 포트로 SSH 접속을 하면 Destiantion Server의 22번 포트로 나오게 되므로 접속이 불가능하던 Destiantion에 SSH 접속이 가능해진다.

ssh -p22222 userB@localhost

Client -> Jump Server -> Destination Server

ProxyCommand 사용

아래 명령어는 최종 목적지인 localhost의 22222번 포트로 접속을 하되 ProxyCommand에는 적힌 프록시 서버를 경유하여 접속하라는 뜻이다.

ssh -o ProxyCommand="ssh -W %h:%p userA@aaa.aaa.aaa.aaa" -p22222 userB@localhost

ProxyJump 사용

ProxyCommand 기능을 하면서 ProxyCommand보다 후에 추가된 Jump기능을 사용하면 된다. 훨씬 간결하게 적어줄 수 있다. -J 옵션 뒤에 여러개의 서버 주소를 ,로 분리하여 적으면 적은대로 프록시서버를 거쳐간다.

ssh -J userB@aaa.aaa.aaa.aaa -p22222 userA@localhost

Related Posts

답글 남기기

이메일 주소는 공개되지 않습니다.