테크매니아
외부접속 안되는 환경에서 SSH 역터널링으로 접속하기 본문
상황
Destination 서버는 어떤 시설내부에 사설 IP를 할당받기 때문에 외부에서 접근 불가능한 상황이다.이 상황에서 클라이언트가 외부 서버에 접근하기 위해선 중간에 외부 접속 가능한 IP를 갖고 있는 중계서버가 필요하다.
클라이언트는 중계자 역할을 하는 Jump Server로 접속하고 Jump Server는 최종 목적지인 Destination Server로 접속을 돌리면 된다.
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