<라즈베리파이> 2. SSH, VNC, DuckDNS(무료 DDNS) 설정하기
라즈베리파이(RPI)

<라즈베리파이> 2. SSH, VNC, DuckDNS(무료 DDNS) 설정하기

저번 라즈베리파이 글에서는 라즈베리파이를 조립하고 우분투를 설치하였습니다.

이 라즈베리파이를 바로 모니터와 연결해서 사용할 수 있지만 제 경우에는 계속 모니터의 입력을 바꿔야 하고 메인 컴퓨터에서 복붙 하는 게 안 돼서 SSH와 VNC를 통해 라즈베리파이에 접속하기로 마음먹었습니다.

SSH란?

SSH는 Secure SHell의 약자로 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행할 수 있도록 해 주는 프로토콜이다.

간단하게 말하면 외부에서 해당 컴퓨터의 터미널/CMD를 사용할 수 있는 것이다.

기본적으로 포트 22를 사용하며 암호화되어 있어 중간에 데이터를 가로채도 암호화된 문자만 노출된다. 

*참고: 생활코딩 SSH, 위키백과 

우분투에서 SSH를 활성화하려면 openssh-server를 설치하면 된다.

sudo apt install openssh-server

해당 커맨드를 실행하고 나면 자동으로 SSH가 실행될 것이다.

아래 커맨드를 통해 만약 결과에 Active: Active (running)이라는 글이 보이면 성공적으로 실행된 것이다.

sudo systemctl status ssh

이후 ssh 클라이언트나 (Windows는 PuTTY, macOS는 Termius 추천) 맥과 리눅스의 경우 아래처럼 ssh 커맨드를 통해 실행할 수 있다.

ssh [컴퓨터 이름]@[컴퓨터 ip] -p [포트]

컴퓨터 이름은 처음 설정할 때 적었던 것이며 ip는 "ip a" 커맨드로 inet이라는 단어 옆에 있는 것이다.(inet이 두 개인데 127로 시작하는 것 외의 것이며 와이파이로 연결 중인 경우 랜선을 사용하거나 따로 찾아보기 바란다.

포트는 기본적으로 22로 설정되어 있으며 따로 설정을 바꾸지 않은 경우 -p [포트]는 생략가능하다.

VNC란?

VNC는 Virtual Network Computing의 약자로 간단하게 컴퓨터를 원격으로 조종하는 것이다. 

SSH와 다르게 VNC는 화면을 통해 일반적으로 컴퓨터를 사용하듯이 쓸 수 있게 해 준다.

VNC 서버로는 RealVNC를 사용했다.

라즈베리파이에 우분투처럼 64비트 OS를 사용한다면 일반적인 설치 방법과 차이가 있다. 

*참고: 이 영상을 따라 하였습니다.

먼저, https://archive.raspberrypi.org/debian/pool/main/r/realvnc-vnc/에서 아래 사진에서 흰 부분의 파일을 다운로드한다.

다운로드한 파일을 실행하면 설치 메뉴가 뜨는데 Install이라고 적힌 버튼을 클릭해 설치를 시작한다. 

이렇게 설치하고 끝나면 참 좋겠지만 안타깝게도 설치 프로그램이 설치를 이상한 곳에 하기 때문에 아래 커맨드를 하나씩 실행하여 고쳐야 한다.

sudo ln /usr/lib/aarch64-linux-gnu/libbcm_host.so /usr/lib/libbcm_host.so.0
sudo ln /usr/lib/aarch64-linux-gnu/libvcos.so /usr/lib/libvcos.so.0
sudo ln /usr/lib/aarch64-linux-gnu/libmmal.so /usr/lib/libmmal.so.0
sudo ln /usr/lib/aarch64-linux-gnu/libmmal_core.so /usr/lib/libmmal_core.so.0
sudo ln /usr/lib/aarch64-linux-gnu/libmmal_components.so /usr/lib/libmmal_components.so.0
sudo ln /usr/lib/aarch64-linux-gnu/libmmal_util.so /usr/lib/libmmal_util.so.0
sudo ln /usr/lib/aarch64-linux-gnu/libmmal_vc_client.so /usr/lib/libmmal_vc_client.so.0
sudo ln /usr/lib/aarch64-linux-gnu/libvchiq_arm.so /usr/lib/libvchiq_arm.so.0
sudo ln /usr/lib/aarch64-linux-gnu/libvcsm.so /usr/lib/libvcsm.so.0
sudo ln /usr/lib/aarch64-linux-gnu/libcontainers.so /usr/lib/libcontainers.so.0

ln 커맨드는 표기된 두 파일이 서로 같도록 하게 하는 커맨드라고 생각하면 된다.

위 커맨드를 모두 실행하면 이제 서비스를 시작하면 되며 아래의 커맨드를 실행하여 시작시킬 수 있다.

sudo systemctl enable vncserver-x11-serviced.service
sudo systemctl enable vncserver-virtuald.service
sudo systemctl start vncserver-x11-serviced.service
sudo systemctl start vncserver-virtuald.service

start는 지금 바로 프로그램을 실행시키는 것이고 enable은 컴퓨터가 시작할 때 실행시키는 것이다. 

그 뒤에는 RealVNC에서 회원가입 후 아래 커맨드를 실행해 이메일과 비밀번호를 입력합니다.

sudo vnclicensewiz

마지막으로 다음 커맨드를 실행한 수 WaylandEnable=false 앞의 #를 지운 후 저장합니다.

sudo gedit /etc/gdm3/custom.conf

*참고: VNC는 5900을 기본 포트로 합니다.

DuckDNS?

DuckDNS는 무료 DDNS 서비스로 프로그램 설치 없이 간단히 세팅할 수 있는 장점이 있습니다.

DDNS나 DuckDNS를 쓰는 이유는 SSH와 VNC를 사용하는 이유는 외부 네트워크, 즉 집 밖에서는 아까 사용한 ip를 통해서는 접속이 불가능하다는 겁니다.

외부에서 접속하려면 집의 외부 ip를 통해 접속해야 하는데, 아까 SSH와 VNC의 포트를 알려드린 이유가 여기에 있습니다.

바로 포트포워딩을 위한 것인데, 아까 사용한 ip에 포트 22와 5900을 원하는 포트로 포트포워딩 하시면 됩니다.

포트포워딩을 하는 방법에 대해서는 인터넷 서비스 제공자마다 다르기 때문에 직접 찾아보시기 바랍니다.

*저는 SKT를 사용하는데 모뎀에서 비밀번호를 안 찾고 공유기에서 찾으려고 해서 개고생 했습니다. 이 점 알아두시기 바랍니다.

그러면 DuckDNS는 왜 사용하는 것일까요?

인터넷 서비스 업자가 제공하는 외부 아이피는 유동 ip이기 때문에 변할 수 있습니다. 

이렇게 변하는 유동 ip를 (기억하기 쉬운) 하나의 주소와 연결하는 것이 DDNS입니다.

다양한 DDNS 서비스가 있지만 무료고 세팅이 쉬운 DuckDNS를 추천하는 것입니다.

먼저 DuckDNS에서 회원가입을 하고 도메인을 추가합니다.

로그인 후 화면

그다음은 curl을 설치합니다.

sudo apt install curl

curl은 다양한 통신 프로토콜을 이용해 데이터를 전송하기 위한 프로그램이며 간단하게 url로 서버와 소통한다고 생각하시면 됩니다.

그 후 아래 커맨드를 이용해 전용 폴더를 만들고 작동할 스크립트 파일을 만듭니다.

*중요: 아래 커맨드를 실행할 때는 명령 창에 cd라고 친 후에 작업하시기 바랍니다. - 홈 폴더에서 작동하도록 프로그램이 만들어져 있습니다.

mkdir duckdns
cd duckdns
vi duck.sh

이러면 vi라는 에디터를 사용하게 되는데 i를 누른 다음 아래 여러분의 install 페이지에서 빨간색으로 둘러싸인 곳에 보이는 코드를 복붙 하고 esc를 누른 후 :wq!를 눌러 빠져나옵니다.

그 뒤에는 위의 그림처럼 커맨드를 하나씩 실행하면 됩니다. 

chmod 700 duck.sh
crontab -e

위 커맨드를 실행하면 에디터가 뜨는데 아래 텍스트를 맨 밑에 추가하고 ctrl+s로 저장, ctrl+x로 나가면 됩니다.

*/5 * * * * ~/duckdns/duck.sh >/dev/null 2>&1

마지막으로 ./duck.sh를 실행하고 cat duck.log을 실행했을 때 OK라는 텍스트가 뜨면 성공입니다.

성공적으로 실행된 모습


감상: 사실 파이썬 업그레이드하다가 OS가 망가져서 새로 까면서 글을 적는 중입니다. 리눅스는 OS에 대한 자유도가 높은 만큼 자그마한 실수라고 생각하는데 생각보다 훨씬 더 큰 영향을 줄 수도 있다는 것을 몸소 느꼈습니다.

그와 별개로 다양한 방법으로 개발환경을 세팅할 수 있고 인터넷만 있다면 어디에서나 접속해서 개발할 수 있다는 게 큰 장점인 것 같습니다.

개인적으로 아이패드에 마우스랑 키보드 연결해서 프로그래밍할 수 있다는 게 제일 마음에 듭니다.

앞으로 리눅스에 대해 더 공부하면서 다양하게 활용해보고 싶습니다.