ssh를 통한 원격의 X윈도우 어플리케이션 실행
ssh를 사용하지 않는 사람이 거의 없는 현실에도 불구하고 ssh로 X11 트래픽을 포워딩할수 있다는 사실을 알고있는 사람은 많지않다. 만약 로그인을 하는 ssh서버가 X11 포워딩을 허용한다면 다음과같이 X어플리케이션을 간편하게 실행할수 있다.

$ ssh -X 원격서버주소
$ firefox &


로컬시스템에서 X를 실행하는 동안은 데스크탑에 원격서버의 firefox 가 실행될것이다. 이 firefox 는 실제로 로그인되어있는 원격서버에서 실행되어져서 모든 X11트래픽이 암호화되어 로그인한 ssh연결로 보내지고, 로컬의 화면에 표시되는것이다.

포워딩이 되지않는 다면 sshd_config 파일의 내용중에 다음설정을 추가하고 sshd 데몬을 다시 시작한다. 레드햇계열이라면 /etc/ssh/ 안에 있을것이다.

X11Forwarding yes

윈도우라면 X서버가 구동되고 있어야 원격의 리눅스서버의 X11 어플리케이션을 실행시킬수 있다.
www.netsarang.co.kr 의 Xmanager 를 이용하면 원격의 리눅스X 어플리케이션을 실행시킬수 있으며, 이에 대한 내용은 별도의 문서로 제작해두었으니 참고하기 바란다.

리눅스에서 SSH의 터널링 사용하기
터널링은 다른말로 포트포워딩이라고도 사용된다.
ssh는 원격의 쉘 엑세스와 원격명령의 실행뿐만 아니라 임의의 TCP 포트를 다른쪽으로 포워딩할수 있다. 이기능은 이메일, 웹 또는 기밀을 유지해야하는 다른 트래픽을 보호하는데에 매우 편리하다

ssh의 포워딩과정은
1. 로컬포트에 바인딩하고 암호화를 수행한다
2. 암호화된 데이터를 ssh로 연결된 원격종착지로 보낸다
3. 복호화를 수행한다.
4. 복호화된 수행결과를 지정된 로컬또는 원격호스트의 포트로 보낸다.

-L(Local의 약자) 옵션을 통해서 ssh 터널을 시작하게 된다.
$ ssh -f -N -L포트번호1:호스트명:포트번호2 -l 사용자명 서버명
예) #ssh -f -N -L110:mailhost:110 -l user mailhost

이 예에서 권한포트(110,POP포트)에 바인딩해야 하므로 루트로 실행되어야 한다. 또한 로컬에서 실행되는 다른POP 데몬이 있다면 비활성화 해야한다. 그렇지않으면 방해가 생기므로 서비스를 비활성화하지 않는다면 다른포트로 대체해야한다.

이제 모든 POP트래픽을 암호화 하기위해 메일클라이언트가 로컬호스트의 110번 포트에 연결되도록 설정하면 전체트래픽이 암호화 되어서(마치 로컬호스트를 거치지 않은것처럼) mailhost에게 이메일을 전달할 것이다.

-f 옵션은 ssh가 백그라운드로 실행되도록하며 -N 스위치는 원격시스템에서 실제로 명령을 실행하지 않게한다. 만일 ssh서버가 압축을 지원한다면 -C 옵션을 이용해서 압축한다. 압축을하면 메일을 다운로드하는데 걸리는 시간을 대폭줄일수 있다.

ssh로 연결할때는 원하는만큼 -L 옵션을 사용할수 있다
외부로 보내어지는 이메일 트래픽을 포워딩하려면 다음과같이 할수있다.

# ssh -f -N -L110:mailhost:110 -L25:mailhost:25 -l user mailhost

이렇게하면 적어도 메일을 발송하는 SMTP 까지는 암호화된 트래픽이 전송될것이다.
원격에 접속한 상태에서 포트를 신속하게 포워딩하기 위해서는 다음과같이한다.

1.엔터를친다
2.~C를 입력한다
ssh> L8080:localhost:80
Forwarding port.


이렇게하면 현재 쉘이 로컬포트 8080 번을 접속한 원격서버의 80번으로 포워딩할것이다.

SSH 의 터널링 사용하기(윈도우)
SSH의 아주 특별하고도 중요한 기능인 터널링(Tunneling)에 대해서 알아보도록 하겠다. Tunneling은 Forwarding이라고도 부르는데 다음 그림을 보면 이해하기가 쉬울 것이다.

* 첨부파일 그림 참조

[그림 1] 『SSH, The Secure Shell: The Definitive Guide』 317p 참고, SSH 포워딩

위 [그림 1]에서처럼 Host A에는 SSH 클라이언트가 설치되어 있고 Host B에는 SSH 서버가 설치되어 있다고 하자.SSH 클라이언트를 통해 SSH 서버에 접속을 하면 둘 사이에 연결이 이루어지는데 이 연결 통로를 터널이라고 한다.

암호화 등을통해 터널처럼 외부로부터 이 연결을 보호하기 때문이다. 그래서 터널링이라고 부른다. 여기서 중요한 사실은 이러한 SSH를 통해만든 터널을 다른 애플리케이션이 이용할 수가 있다는 것이다. 이러한 일을 가능하게 하는 것이 포트 포워딩(PortForwarding)이란 기술이므로 포워딩이라고도 부른다.

그렇다면 이것이 무슨 의미가 있을까? 이 터널을 이용한다는 것은 곧 암호화 등의 SSH의 장점을 모두 사용할 수있다는 것을 의미한다. 즉, 암호화를 지원하지 않는 프로그램을 안전하게 사용할 수 있다는 것이다. (참고로 TCP를 사용하는프로그램만 지원하고 UDP 등 다른 프로토콜은 지원하지 않는다.)

다시 위의 [그림 1]을 살펴보도록 하자. Host A의application client가 Host B의 application server로 접속할 때에 일반적으로는 직접접속(direct connection)을 한다. 하지만 SSH 터널링을 이용하면 application client가 SSH클라이언트에 접속을 하고 필요한 데이터를 SSH 서버를 통해 application server에 전달한다.

즉 그림에서처럼forwarded connection을 하게 된다. 터널링은 SSH 클라이언트가 SSH 서버에 접속되어 있을 때에만 유효하고,연결시에만 설정할 수 있다는 것에 유의하자.

터널링에 대해서 좀 더 자세히 알아보도록 하자. 터널링은 크게 Local port forwarding과Remote port forwarding으로 이루어져 있다. Local port forwarding은 리눅스 클라이언트에서는다음과 같은 형식으로 사용할 수 있다.

$ ssh -L포트번호1:호스트명:포트번호2 서버명

ssh 터널링

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다