본문 바로가기
Backend MLOps/개인 환경 구축 기록

[ 자취방 워크스테이션 ] #7 포트 포워딩 그 후

by SteadyForDeep 2020. 12. 26.
반응형

//1

포트 포워딩을 끝냈으니.. 이제 뭘 해야할까?

포트포워딩을 했다고 그 컴퓨터에 뚝딱 접속이 가능할까?

아니다.

결론부터 말하자면 그 포트를 물고 돌아가는 프로그램이 있어야한다.

 

 

 

 

//2 가장 쉬운 예로 가 보자

포트가 열려있는지 알아보는 가장 쉬운 방법은

ssh를 사용하는 방법이다.

원래는 WSL같은 것을 활성화해서 알아보는 방식이

가장 많이 소개되어 왔지만

요즘은 그냥 윈도우 파워쉘에서 ssh를 사용할 수 있다. 

 

시작을 눌러서 W 단으로 가보면

PowerShell을 열 수 있다.

ISE말고 그냥 PowerShell을 열자.

요런게 뜨면 된다.

사실 나는 ssh 라고 치고 엔터를 친 상황이다.

아래의 대괄호 안에 들어 있는 옵션들은

ssh를 실행하는데 필요한 옵션들이다.

 

ssh는 원격으로 컴퓨터에 접속하여서

그 컴퓨터의 터미널을 실행시켜주는 프로토콜이다.

그러니까 다른 컴퓨터의 쉘을 열어주는 기능을 한다.

이제 우리가 포워딩해준 IP와 포트로 접속해서 터미널을 열어보자.

그리고 그 컴퓨터의 텍스트파일을 열어보는 간단한 예제를 수행해 보자.

 

 

 

 

//3 일단 서버컴으로 가보자

서버컴에서 ls를 입력해보자.

그러면 아무것도 안뜬다.

왜냐하면 ls는 현재 디렉토리에 있는 파일들을 보여주는

리눅스 명령어이기 때문이다.

그러면 여기에다가 ssh_test.txt 라는 파일을 만들어보자.

vim 이라는 편집기를 이용해서 ssh_test.txt라는 파일을 만들 수 있다.

vim은 켜졌다고 바로 수정할 수 있는 모드로 들어가는 것이 아니다.

왼쪽 아래가 INSERT로 표시되면 삽입모드에 들어간 것인데

키보드의 "i"를 누르면 왼쪽 아래가 INSERT로 바뀐 것을 볼 수 있다.

ESC를 누르면 모드가 풀린다. 

이상태에서 Hello SSH! 라던지 뭐 아무 말이나 입력해보자.

정상적으로 잘 입력 된다.

혹시 이상한 상태에 빠져버려서 매우 무섭고 두려운 상황이라면

당황하지 말고 ESC를 연타 한 후에 :q! 를 입력하고 엔터를 치면 꺼진다.

 

저장할때는 ESC -> :wq -> 엔터 를 치면 된다.

왼쪽 아래에 :wq 라고 뜨는지 확인한 후 엔터를 치자.

이제는 ls를 치면 성공적으로 우리가 만든 파일이 보인다.

이제 게이밍으로 돌아와보자.

그 다음 원격으로 저 파일을 열어서 우리가 만든 파일과 일치하는지 볼 것이다.

 

//4 우선 내부망.

우선 내부망으로 접속해보자.

같은 라우터에 물려있는 기기들 끼리는 딱히 포워딩을 안해줘도 접속이 가능하다.

앞서 설정해준 내부 IP로 게이밍 -> 계산용 서버 접속을 한 상태다.

 

[계정이름(id)]@[IP] 를 입력하고 엔터치면

맨처음에는 키를 등록할거냐 하는 질문이 온다.

yes라고 입력하면 비밀번호를 물어보고 비번을 치면

리눅스를 처음 켰을때 화면이 보인다.

이때 id는 리눅스 컴퓨터에서 보이는 id를 입력해 주면 된다.

내 서버에서는

[davi]@[davihomeworkstation]:~$

이렇게 보이는데

여기서 davi가 id가 되고 davihomeworkstation이 컴퓨터 이름이 된다.

이제 ls 라고 해보면 아까 우리가 만들었던 그 파일이 딱 보인다.

그리고 cat을 이용해서 내용을 확인해 봤더니 우리가 만든 그 파일이 맞다. (소름)

 

그렇다. 원격접속에 성공한 것이다.

 

 

 

 

//5 외부망에서 접속하기

 

이번엔 외부망에서 접속해보자.

외부망으로 접속하는 방법은 공인IP를 이용하는 방법이다.

 

파워쉘에서 ctrl+D를 누르면 원격접속이 해제된다.

이 상황에서 ssh [id]@[공인IP] -p[포트번호]로 입력해 주면 접속이 될 것 같다.

포워딩편에서 포트번호를 10002로 설정해 주었으니

ssh [davi]@[000.000.000.000] -p[10002] 이렇게 해주면 접속이 될 것 같다.

하지만 해보면 실패한다.

왜 그럴까?

 

이 사진을 다시 보자.

저번에 이 사진에서 익숙한 이름들이 계속 보이는 이유가 바로

'암묵적인 약속' 때문이라고 한 적이 있다.

(#6 참조)

2020.12.16 - [딥러닝/개인 환경 구축 기록] - [ 자취방 워크스테이션 ] #6 포트포워딩 및 네트워크 설정 - 3

 

[ 자취방 워크스테이션 ] #6 포트포워딩 및 네트워크 설정 - 3

//1 이만큼 길어질지 몰랐다. 이번 글 안에 반드시 끝을 내겠다. //블로그 운영에 큰 힘이 되는 광고 //2 이때까지 MAC주소와 DHCP IP를 1대 1로 고정하는 작업을 했다. 왜냐하면 시간이 지나면 유동IP

davi06000.tistory.com

 

약속 : 이 프로그램은 엄청나게 많은 수의 사람들이 사용하는데

대부분이 000 이라는 값을 사용하므로

그냥 이 포트는 그 프로그램이 쓰는걸로 합시다.

 

이런 의미이다.

 

지금 우리가 해보려고 하는 SSH의 경우는 포트번호 22를 사용한다.

그런데 우리는 내부포트번호를 8888로 설정해 두었다.

이게 문제가 되는 것이다.

정리해보자면

 

1. ssh를 이용해서 A아파트 101동 1206호 에 원격접속을 하고자 함.

2. A 아파트 까지 찾아갔음 (공인 IP)

3. 101 동 까지 잘 찾아 갔음 (외부 포트)

4. 1206호를 찾아가려고 하니까 12층이 없음! (내부포트 불일치)

 

이런 과정을 거친 것이다.

그렇다면 내부 포트를 22번에 설정한 포트를 하나 더 추가 하면 된다.

 

예를 들자면 이런식이다.

서비스포트를 하나 추가하면서 내부 포트를 22번으로 잡으면

ssh에 접속하는 것이 가능해진다.

 

내 경우에는 텐서플로우를 사용할때 

 

1. ssh (22)

2. jupyter (8888)

3. tensorboard (6006)

 

이 세가지에 연결된 포트들을 항상 열어두고 살았다.

여러분도 환경에 맞는 포트 설정을 해서 오픈해 두면 된다.

다만 전에 말한것 처럼 '암묵적인 약속'과 겹치는 포트를 쓰면

몇몇 프로그램에서 충돌이 일어날 수 있으니 주의해야한다.

 

자 이제는 포트번호에 20022 라고 입력하면

자동으로 192.168.219.102 컴퓨터로 가서 22번 포트에 접속는 상태가 되었다.

PowerShell에

 

ssh [id]@[공인IP] -p20022

 

라고 입력하면

아까 그 내부망으로 접속한 것과 동일하게 접속이 가능하다.

 

//6 정리

그러니까 포트포워딩이라는것은

 

-> [외부IP] : [외부포트] : [내부IP] : [내부포트] ->

 

라는 하나의 길을 뚫어버리는 작업이다.

그런데 내부포트의 사용자가 누구인지

또 어떤 프로그램인지는 여러분의 개발환경에 따라 달라지게 된다.

그러므로 개념을 정확히 이해한 후에

길을 잘 깔아만 원만한 원격접속이 가능해 진다.

이렇게 포트를 이용하는 개념을 잘 알아두면

도커를 이용한 서버관리에 대한 이해가 매우 용이하다.

또 주피터노트북과 같은 웹서버 프로그램을 능숙하게 다루는데에도

굉장히 도움이 된다.

 

 

 

반응형

댓글