라즈베리파이로 AWS Reverse Tunnelling 맺어보기 Computer Tip

지난번에 설치한 라즈베리파이 3 모델B가 잘 돌아서
이제는 AWS와 리버스(역) 터널링을 맺어 봅니다.

AWS에 공짜로 간단한 서버를 만들어 놓으면
(해당 방법의 설명은 무척 많습니다)
아래와 같이 쉽게 키로 (어디에서나) 쉽게 접속할 수 있습니다.

ssh -i "my.pem" ubuntu@....ap-northeast-2.compute.amazonaws.com

같은 키를 라즈베리파이에 넣고 수행해도 잘 동작합니다.

이제 역 터널을 맺어 보려 합니다.

라즈베리파이 터미널에서 

ssh -f -i my.pem -N -R 12345:localhost:22 ubuntu@....ap-northeast-2.compute.amazonaws.com

와 같이 터미널에서 수행하면 잘 수행되고,

다시 AWS 우분투 너미널에서 


ubuntu@ip...:~$ netstat -nat
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
...

위와 같이 확인해 보면 12345 관련 포트가 없지만,

역 터널을 맺고 나면

ubuntu@ip...:~$ netstat -nat
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:12345         0.0.0.0:*               LISTEN     
...

위와 같이 로컬 loopback에 12345 포트를 열고 있음을 알 수 있고,

ubuntu@ip-172-31-13-153:~$ ssh pi@localhost -p 12345 -v
OpenSSH_6.6.1, OpenSSL 1.0.1f 6 Jan 2014
...
Last login: Tue Aug  9 09:52:52 2016 from ....
pi@raspberrypi:~ $ 

위와 같이 잘 접속됨을 알 수 있습니다.

즉 사이에 어떤 난관이 있어도 반대로 들어갈 수 있음을 의미합니다.
(거의 백도어라 할 수 있겠네요)

이제 문제는 라즈베리파이에서 이 스크립트를 /etc/rc.local 에 넣어 재시작 할 때
돌릴 수 있게 하는 것이었는데요 여러 시행착오 끝에 알아낸 방법은


1) ssh 서버 (AWS EC2 우분투 서버)와 클라이언트(라즈베리파이)에 nologin 계정 생성

$ sudo useradd -s /usr/sbin/nologin -m sshtunnel

위의 명령을 양쪽 다 실행시켜 새로운 터널용 계정을 다 만들어 줍니다.


2) stunnel 계정으로 들어가 키를 만들고 키 교환을 합니다.

$ sudo su sshtunnel -s /bin/bash
sshtunnel 계정으로 들어갑니다.

$ ssh-keygen
위의 명령으로 키를 모두 생성한 후

sshtunnel@raspberrypi:~ $ cat /home/sshtunnel/.ssh/id_rsa.pub
라즈베리파이의 /home/sshtunnel/.ssh/id_rsa.pub 내용을

AWS 우분투 서버의 sshtunnel 계정의 .ssh/authorized_keys 에 추가해 줍니다.
직접 접속을 시도하면 연결을 하다가 마지막에 계정 어쩌구 저쩌구 하면서 실패했습니다만
명령없이 역터널을 둟립니다.


3) 라즈베리파이 /etc/rc.local 에 exit 0 윗 줄에 다음을 추가해 줍니다.

sudo su -s /bin/sh sshtunnel -c "ssh -f -i /home/sshtunnel/.ssh/id_rsa -N -R 12345:localhost:22 sshtunnel@....ap-northeast-2.compute.amazonaws.com"

그러면 라즈베리파이를 reboot 시켜도 역 터널이 잘 맺어지게 됩니다.

참고로, 경우에 따라 ssh 연결에 아무런 통신이 없으면
Timeout 에 의해 끊길 수 있으므로 연결하는 곳 양쪽 모두에

$ vi ~/.ssh/config
Host *
  ServerAliveInterval 60

라고 넣어 두고 작업을 하면 안 끊길 것입니다.

어느분께는 도움이 되셨기를...

핑백

덧글

댓글 입력 영역

구글애드텍스트