SSH Remote Forwarding으로 개발 서버를 임시 노출하기

개발 서버는 내부 네트워크 안에 있어 외부에서는 접속이 불가하다. 그러나 가끔 외부 네트워크에 노출해야만 하는 경우가 발생한다. 이 때 SSH 터널링으로 외부에 있는 서버를 경유하여 내부로의 접근이 가능하게 할 수 있다. 다음 스텝을 따라해 보자.

원격 서버에 접속할 때 포워딩할 포트를 지정한다. 여기서는 12000번이라고 가정한다. 만약 원격 서버도 공유기 같은 장비에 물려 있다면 12000번으로 포트 포워딩이 가능한지 확인한다.

원격 서버에 /etc/ssh/sshd_config 파일을 여러 아래 설정이 있는지 확인한다.

GatewayPorts clientspecified

없다면 추가하고 sshd 서버를 재시작하자.

이제 로컬 서버에서 원격 서버로의 접속을 시도한다. 만약 로컬 서버가 localhost:8000 에서 돌고 있다고 가정하면 아래처럼 연결한다.

ssh -p <ssh_port> -NR 0.0.0.0:12000:localhost:8000 <server_address>Code language: CSS (css)

다른 예로, 만약 로컬 서버가 특정 도메인으로, https를 사용한다면 이렇게 할 수 있겠다.

ssh -p <ssh_port> -NR 0.0.0.0:12000:<local_domain>:443 <server_address>Code language: CSS (css)

이렇게 하고 https://<server_address>:12000 으로 접속하면 로컬 서버에 접속한 것처럼 동작한다. 물론 원격 서버를 거쳐 우회하는 것이기 때문에 속도는 살짝 느릴 것이다.

또한 웹 서버의 도메인이 싹 바뀌는 효과가 있기 때문에, 워드프레스 같은 앱을 돌릴 때는 wp-config.php에서 미리 WP_HOME, WP_SITEURL 상수를 미리 지정해야 할 것이다.

SSH 접속은 일정 시간이 지나면 끊어질 수 있다. 영속적인 접속을 유지하려면 autossh 같은 툴을 사용하면 된다. autossh를 설치, 명령을 ssh로 넣던 것을 autossh로 변경하면 된다.

autossh -p <ssh_port> -NR 0.0.0.0:12000:<local_domain>:443 <server_address>Code language: CSS (css)