VNC(Virtual Network Computing) 실습 및 트러블슈팅

Hiyalobi·2024년 4월 24일
0

linux_master

목록 보기
13/14
post-thumbnail

이번 이야기도 저번과 같이 'Rocky linux 8로 리눅스 1급 정복하기'를 가반으로 실습이 진행되었습니다.

다른 여타 서비스들은 이제 거의 실습을 다한 상황에서 블로그 감이 나올 정도의 오류가 없어 작성하지 못하고 있는 도중 3장의 마지막 실습인 VNC는 당연하게도 오류가 출력되었습니다.

어떻게 보면 간단한데 해결하는데에 조금 시간이 걸린지라...

VNC 서버

VNC 서버 설정

우선 서버 구성을 위해 패키지를 설치하고, 각 환경 설정을 바꾸어 줍니다.

또한 SELinux를 disabled로 설정하고, 진행합니다.(제 환경에서는 이미 되어 있어 추가하지 않습니다.)

sudo dnf install tigervnc-server

sudo vi /etc/gdm/custom.conf 

우선 서버 구성을 위해, 패키지를 설치하고, 각 환경 설정을 바꾸어 줍니다.

윗 이미지와 같이 WaylandEnable=false로 설정해줍니다.

sudo vncpasswd

여기서 만약 root 사용자로 설정하는 것이 아니라면 반드시 sudo를 입력하여야 합니다.
(그 이유는 아래 troubleshooting 쪽에서 풀도록 하겠습니다.)

패스워드 설정 시 해당 패스워드로 클라이언트도 접속합니다.
저는 보기 전용 패스워드는 별도 설정은 하지 않았습니다.

sudo vi /etc/tigervnc/vncserver-config-defaults

sudo vi /etc/tigervnc/vncserver.users

이후, /etc/tigervnc/vncserver-config-defaults와 /etc/tigervnc/vncserver.users 모두 편집해줍니다.

/etc/tigervnc/vncserver-config-defaults에서는 데스크톱으로 gnome을 사용하고, 해상도를 1024x768로 설정하였습니다.

/etc/tigervnc/vncserver.users는 root가 디스플레이 포트번호 1번으로 지정하여 port 5901을 사용하도록 지정합니다.

설정이 모두 끝났다면, vnc 구동을 위한 설정한 포트의 서비스 파일을 생성합니다.

sudo cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service

vnc 서버 구동

모든 설정이 마쳤다면 데몬 서비스를 실행하여, 서버를 구동합니다.

systemctl daemon-reload

systemctl start vncserver@:1

systemctl status vncserver@:1

systemctl enable vncserver@:1

정상적으로 구동된다면 status 옵션 실행시 다음 이미지와 같이 초록색 active가 출력됩니다.

리눅스 클라이언트

리눅스 클라이언트 설정

VNC에서 클라이언트가 하는 설정 내용은 없습니다.

리눅스에서는 패키지를 설치하고, vncviewer 명령어를 사용하여, 서버주소와 포트번호로 vnc로 원격 접속이 가능합니다.

sudo dnf install tigervnc

vncviewer 192.168.56.102:5901

vncviewer 명령어가 정상적으로 실행되었다면 아래 이미지와 같은 화면이 출력됩니다.

취약하다는 메세지는 무시하고, 비밀번호 작성란에 서버를 설정할 때, 작성한 패스워드를 기입해 줍니다.

리눅스 클라이언트 실행

서버와 연결이 되어 클라이언트에서 tigerVNC 화면으로 서버와 동일한 ip주소가 나타나는 것을 확인할 수 있습니다.
즉, 원격지 시스템에 정상적으로 접속되었습니다.

윈도우 클라이언트

윈도우의 경우 우선 방화벽을 내리고, RealVNC 사이트에서 VNC viewer 프로그램을 다운받습니다.
해당 사이트에서 지속적으로 로그인을 하라거나 패키지를 구매하라는 식으로 화면이 넘어갑니다.
하지만, 만일 실행 파일을 install한 이후 로그인을 하라는 메세지가 뜬다면, 이미 설치가 완료되었기 때문에 종료하고 해당 프로그램을 찾아 실행시켜 줍니다.
실행한 프로그램에서도 sign in을 하지 않더라도 테스트 용으로서는 사용할 수 있습니다.

위쪽에 서버 주소와 포트번호를 기재하면, 인증 화면이 출력됩니다.
여기서도 이전 서버 설정 시 작성한 패스워드를 기입하면 됩니다.

윈도우와 리눅스 클라이언트 동시 테스트

원격 모니터링이 잘 되는지 확인하기 위해 두 개의 클라이언트를 동시에 실행시켜 테스트 해 보았습니다.

왼쪽이 Virtual box에 설치된 Rocky linux 8 기반 VNC 클라이언트고, 오른쪽이 RealVNC 프로그램으로 실행 중인 윈도우 클라이언트 화면입니다.

VNC Server TroubleShooting - 방화벽

만일 SELinux의 설정을 비활성화하였음에도 연결이 안된다면, 방화벽 설정까지 해야합니다.

firewall-cmd --permanent --add-service=vnc-server
firewall-cmd --permanent --add-5900/tcp
firewall-cmd --permanent --add-5900/udp
firewall-cmd --permanent --add-5901/tcp
firewall-cmd --permanent --add-5901/udp
firewall-cmd --reload

vnc-server에 대한 서비스 추가와 각 포트 추가를 해주었습니다.
사실 5901 포트만 추가해도 될 것 같긴 합니다만, 이전 설정에서 VNC의 기본 포트인 5900까지 모두 열어 두어 작성하였습니다.

VNC Server TroubleShooting - inactive(dead)

해결에서 꽤 시간이 많이 걸렸다는 부분이 이 부분입니다.

모든 설정을 확인하여도 오타나 추가적으로 잘못된 부분을 발견할 수 없었으나, 아래 이미지와 같이 systemctl -status vncserver@:1을 하였을 때, 결과는 inactive(dead)가 출력되었습니다.

다른 사람들이 알려준 방법들 예를 들어 config 파일에 localhost와 관련된 설정을 넣는다거나 등등의 설정들을 하엿으나, 해결하지 못했습니다.

특히 다른 사람들이 설치한 폴더가 조금 다른 듯해, log 파일을 찾지를 못했습니다...

.vnc에 있다고 하는데 계속 찾질 못했는데 경로는 ~/.vnc로 home 아래 있습니다만 ls명령어로 확인하면 출력되지 않습니다.

cd ~/.vnc

해당 명령어를 사용하면 해당 디렉토리로 들어가집니다.

현재 해결한 이후 캡쳐본입니다만, 이전 디렉토리로 이동하면 localhost.localdomain:1.log만 존재했습니다.

우선 localhost.localdomain:1.log는 로그 파일로 해당 파일을 vi 편집기를 이용해 확인하면 오류 사항에 대해 판단할 수 있습니다.

예상 가능하듯 저에게 발생한 오류는 passwd 파일이 생성되지 않아서입니다.

log 파일에서도 passwd 파일이 생성되지 않아, 오류가 발생하였다고 메세지를 출력해주더라구요...

원인을 따지자면 root가 아닌 기타 사용자로 vncpasswd를 사용한 것이 문제가 되었습니다.

윗 이미지의 passwd의 소유권을 확인하면 root만이 작성 가능하고, 그 이외의 사용자들은 파일을 생성할 수 없다는 것을 확인할 수 있습니다.

따라서 해당 문제는 su 명령어를 이용해 root 사용자로 변환하여 설정하거나, sudo를 사용해야 합니다.

참고사이트

[참고사이트]-VNC authentication enabled, but no password file created

profile
유영하다

0개의 댓글

관련 채용 정보