차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

reverse_ssh_tunneling [2019/08/19 12:34] (현재)
koov 만듦
줄 1: 줄 1:
 +====== Reverse SSH Tunneling ======
 +
 +출처 : http://​egloos.zum.com/​mcchae/​v/​11194088
 +
 +
 +{{:​os:​a0105618_5652c601653db.png|}}
 +
 +우리 집안에 들어와 있는 인터넷선을 NAT를 이용해서 자신의 노트북이 192.168.1.10 이라는 주소를 공유기를
 +통하여 주소를 받았다고 가정합니다.
 +
 +그리고 원격 공인 IP를 가지는 10.20.30.40 이라는 리눅스 서버가 있어 여기에 SSH로 접속할 수 있다고 가정합니다.
 +
 +그러면 192.168.1.10 머신에서
 +
 +<WRAP prewrap>
 +<code bash>
 +$ ssh user@10.20.30.40 ​
 +</​code>​
 +</​WRAP>​
 +
 +이라고 하여 10.20.30.40 머신에 접속 가능하다고 가정합니다.
 +
 +그런데 NAT 환경 등으로 인하여 10.20.30.40 에서는 192.168.1.10 으로는 결코 접속할 수 없습니다.
 +그 이유는 네트워크 경로가 마련되어 있지 않기 때문이지요.
 +물론 공유기에서 해당 서비스포트를 포트 포워딩을 설정하여 할 수 있지만 이것은 논외 입니다.
 +
 +이제 위와 같은 환경임에도 불구하고 SSH를 간단히 맺을 수 있는 방법을 소개합니다.
 +
 +바로 ssh 중에 -R 옵션을 통하여 가능합니다.
 +
 +우선 192.168.1.10 머신에서 아래와 같은 명령을 줍니다.
 +<WRAP prewrap>
 +<code bash>
 +$ ssh -f -R 12345:​localhost:​22 user@10.20.30.40 sleep 100
 +
 +# 또는
 +
 +$ ssh -nNT -o TCPKeepAlive=yes -R 12345:​127.0.0.1:​22 user@10.20.30.40
 +</​code>​
 +</​WRAP>​
 +
 +(암호를 물어보면 암호를 넣습니다. 아니면 키 관리에 의하여 ​
 +ssh-keygen 명령을 통해 만든 id_rsa.pub 의 내용을 원격 접속할 사용자 홈디렉터리에
 +.ssh/​authorized_keys 를 넣어 키로 접속해도 됩니다. putty에서 키를 이용 참조)
 +
 +
 +간단히 설명하면 다음과 같습니다.
 +-f 옵션으로 user@10.20.30.40 에 접속하여 sleep 100 명령을 실행합니다.
 +그와 더불어 ​
 +-R 12345:​localhost:​22 옵션은 접속된 10.20.30.40 번의 12345 포트를 listen 하는데
 +거기에 접속하는 연결을 로컬 (192.168.1.10)의 22번 포트에 거꾸로 연결시킵니다.
 +
 +위와 같이 되어 있는 상황에서 100초 이내에,
 +
 +원격(10.20.30.40) 서버의 터미널에서
 +<WRAP prewrap>
 +<code bash>
 +$ ssh ruser@localhost -p 12345
 +</​code>​
 +</​WRAP>​
 +
 +와 같이 접속 시도를 하면
 +
 +192.168.1.10에서 10.20.30.40 으로 만들어 놓은 터널을 통하여
 +거꾸로 10.20.30.40에서 192.168.1.10의 sshd 로 접속 가능합니다.
 +
  
  • reverse_ssh_tunneling.txt
  • 마지막으로 수정됨: 2019/08/19 12:34
  • 저자 koov