ij.Log

SSH - 리버스 터널링

외부에서 접속이 불가능한 PC 로 원격 접속을 하려고 하면, reverse tunnerling 이 필요하다.

ssh -R 옵션을 통해 실행할 수 있는데,

즉 reverse tunnerling을 통해 외부에서 접속이 불가능한 PC A와, 외부에 있는 PC B가 있을 때, B가 A로 접속을 할 수 있다.

A: 외부에서 접속이 불가능한 PC

B: 외부에 있는 PC

보통 SSH 연결은 A → B 로 이루어질 수 있으나, 이 반대로 접속을 해야 할 때가 있다. 이 경우 ssh -R 옵션을 통해 해결할 수 있다.

reverse tunnerling 절차는 다음과 같다.

1. A 에서 ssh 를 통해 B 로 reverse tunnel 를 열어준다.

user_A$ ssh -R ${B의 터널링 포트}:localhost:${A의 터널링 포트} ${B의 계정}@${B의 도메인, 또는 ip} -p${B의 ssh 포트}
  • B의 터널링 포트: B에 열릴 포트,
  • A의 터널링 포트: B와 연결 될 A의 포트

예를 들어 아래와 같이 명령어를 입력하면, A 에서 111.111.11.1 의 PC 에 port 22로 ssh 접속을 시도한다. 접속이 성공한다면, 111.111.11.1 의 PC 에서 port 1234로 접속을 할 때, A 의 port 22로 접속을 할 수 있다.

user_A$ ssh -R 1234:localhost:22 test@111.111.11.1 -p:22

2. 위의 과정을 거치면 B에서 B 의 터널링 포트로 접속했을 때, A 의 터널링 포트로 연결된다.

user_B$ ssh localhost -p ${B의 터널링 포트}