역 SSH 터널링이란 무엇입니까? (및 사용 방법)

접속이 불가능한 리눅스 컴퓨터에 SSH를 사용해야 하나요? 걱정 마세요! 원격 SSH 세션을 가능하게 하는 방법이 있습니다. 바로 역 SSH 터널링입니다. 지금부터 그 방법을 자세히 알아보겠습니다.

역 SSH 터널링이 필요한 상황

때로는 원격 컴퓨터에 접근하는 것이 매우 어려울 수 있습니다. 방화벽 규칙이 엄격하거나 네트워크 주소 변환(NAT)이 설정되어 있을 수 있기 때문입니다. 이러한 상황에서 어떻게 연결해야 할까요?

우선 몇 가지 용어를 정의해 보겠습니다. 여러분이 현재 사용하고 있는 컴퓨터는 ‘로컬 컴퓨터’입니다. 연결하려는 대상 컴퓨터는 ‘원격 컴퓨터’입니다. 이 글에서 로컬 컴퓨터는 “Sulaco” (노란색 터미널 창)로, Manjaro Linux를 실행 중이며, 원격 컴퓨터는 “wdzwdz” (보라색 터미널 창)로, Ubuntu Linux를 실행 중이라고 가정하겠습니다.

일반적으로는 로컬 컴퓨터에서 원격 컴퓨터로 SSH 연결을 시도합니다. 그러나 특정 네트워크 문제로 인해 원격 컴퓨터에 직접 SSH로 연결할 수 없을 때 역 SSH 터널링이 필요합니다.

네트워크 구성이 간단하다면 원격 컴퓨터에서 로컬 컴퓨터로 연결을 설정할 수 있습니다. 하지만 이는 원격 컴퓨터에서 명령줄 세션을 제공하지 않으므로 충분하지 않습니다. 하지만 일단 연결이 설정되면 다음 단계로 나아갈 수 있습니다. 바로 역 SSH 터널링입니다.

역 SSH 터널링이란 무엇일까요?

역 SSH 터널링은 이미 설정된 연결을 활용하여 로컬 컴퓨터에서 원격 컴퓨터로 새로운 연결을 만드는 기술입니다.

원래 연결은 원격 컴퓨터에서 로컬 컴퓨터로 향하므로, 이 연결을 반대 방향으로 사용하는 것을 “역방향”이라고 부릅니다. 또한, SSH는 보안 연결이기 때문에 기존의 안전한 연결 내부에 또 다른 안전한 연결을 만드는 것입니다. 이는 원격 컴퓨터에 대한 연결이 기존 연결 내에서 사설 터널 역할을 한다는 것을 의미합니다.

이러한 이유로 “역 SSH 터널링”이라는 이름이 붙여졌습니다.

작동 원리

역 SSH 터널링은 이미 설정된 연결을 통해 원격 컴퓨터가 로컬 컴퓨터의 새로운 연결 요청을 수신하도록 설정하는 방식으로 작동합니다.

원격 컴퓨터는 로컬 컴퓨터의 특정 네트워크 포트에서 연결 요청을 기다립니다. 해당 포트에 SSH 요청이 감지되면, 이 요청은 기존의 연결을 통해 다시 로컬 컴퓨터로 전달됩니다. 이것이 바로 로컬 컴퓨터에서 원격 컴퓨터로의 새로운 연결을 가능하게 합니다.

말보다는 직접 설정해보면 더 쉽게 이해할 수 있습니다.

SSH 역 터널링 사용하기

SSH는 대부분의 리눅스 컴퓨터에 기본적으로 설치되어 있지만, 로컬 컴퓨터가 이전에 SSH 연결을 수락한 적이 없다면 SSH 데몬(sshd)을 시작해야 할 수도 있습니다.

sudo systemctl start sshd

컴퓨터를 재부팅할 때마다 SSH 데몬을 자동으로 시작하려면 다음 명령을 사용하십시오:

sudo systemctl enable sshd

이제 원격 컴퓨터에서 다음 명령을 실행합니다.

-R(역방향) 옵션은 SSH에게 새로운 SSH 세션을 원격 컴퓨터에 생성해야 함을 알립니다. 43022:localhost:22는 로컬 컴퓨터의 43022 포트로 들어오는 연결 요청을 원격 컴퓨터의 22 포트로 전달해야 한다는 의미입니다. 43022 포트는 할당되지 않은 포트이기 때문에 선택했습니다. 특별한 의미는 없습니다. [email protected]는 원격 컴퓨터가 로컬 컴퓨터에서 연결할 때 사용할 계정입니다.

ssh -R 43022:localhost:22 [email protected]

만약 로컬 컴퓨터에 처음 연결하는 경우, 경고 메시지가 표시될 수 있습니다. 연결 정보가 인식된 SSH 호스트 목록에 추가될 때도 경고가 표시될 수 있습니다. 출력 결과는 원격 컴퓨터에서 로컬 컴퓨터로의 연결 여부에 따라 달라집니다.

로컬 컴퓨터에 연결하는 데 사용하는 계정의 암호를 입력하라는 메시지가 표시됩니다.

연결이 성공하면 명령 프롬프트가 [email protected]에서 [email protected]로 변경됩니다.

이제 원격 컴퓨터에서 로컬 컴퓨터로 연결되었습니다. 즉, 로컬 컴퓨터에서 명령을 내릴 수 있습니다. who 명령을 사용하여 로컬 컴퓨터의 로그인 정보를 확인해 보겠습니다.

who

dave라는 사용자 계정이 로컬 컴퓨터에 로그인했으며, 원격 컴퓨터가 IP 주소 192.168.4.25에서 (동일한 사용자 자격 증명을 사용하여) 연결되었음을 확인할 수 있습니다.

원격 컴퓨터에 연결하기

원격 컴퓨터에서 연결이 성공적으로 설정되었고 연결을 수신 중이므로, 이제 로컬 컴퓨터에서 원격 컴퓨터에 연결을 시도할 수 있습니다.

원격 컴퓨터는 로컬 컴퓨터의 43022 포트에서 연결을 기다리고 있습니다. 따라서 직관적이지 않지만, 원격 컴퓨터에 연결하기 위해 SSH에게 로컬 컴퓨터의 43022 포트에 연결하도록 요청합니다. 이 요청은 원격 컴퓨터로 전달됩니다.

ssh localhost -p 43022

사용자 계정 암호를 묻는 메시지가 표시된 후 로컬 컴퓨터에서 원격 컴퓨터로 연결됩니다. Manjaro 컴퓨터는 “Ubuntu 18.04.2 LTS에 오신 것을 환영합니다”라고 반갑게 인사합니다.

명령 프롬프트가 [email protected]에서 [email protected]로 변경되었습니다. 이제 접근하기 어려웠던 원격 컴퓨터에 SSH 연결을 성공적으로 만들었습니다.

키를 사용하여 SSH 사용하기

원격 컴퓨터에서 로컬 컴퓨터로 더 편리하게 연결하기 위해 SSH 키를 설정할 수 있습니다.

원격 컴퓨터에서 다음 명령을 입력합니다.

ssh-keygen

암호를 입력하라는 메시지가 표시됩니다. 암호 질문을 무시하려면 Enter 키를 누를 수 있지만 권장하지 않습니다. 암호 없이 원격 컴퓨터에 있는 누구나 로컬 컴퓨터에 SSH로 연결할 수 있다는 의미이기 때문입니다.

기호로 구분된 3~4개의 단어를 사용하는 것이 강력한 암호를 만드는 좋은 방법입니다.

SSH 키가 생성되었습니다.

이제 공개 키를 로컬 컴퓨터로 전송해야 합니다. 다음 명령을 사용하십시오.

ssh-copy-id [email protected]

로그인하려는 사용자 계정의 암호를 묻는 메시지가 표시됩니다. 이 경우에는 [email protected]입니다.

원격 컴퓨터에서 로컬 컴퓨터로 처음 연결을 시도할 때 암호를 제공해야 합니다. 터미널 창이 열려 있는 한, 다음 연결부터는 암호를 다시 입력할 필요가 없습니다.

터널은 무서운 존재가 아니다

터널이 어둡고 복잡하게 보일 수도 있지만, 원격 컴퓨터와 로컬 컴퓨터 간의 관계를 명확히 이해하고 있다면 역 SSH 터널링은 그렇게 어렵지 않습니다. 이 과정을 이해하고 나면, 오히려 쉽게 사용할 수 있게 됩니다.