Bu makalede size, bir Debian 10 sisteminde VNC sunucusunun nasıl yükleneceği ve yapılandırılacağını anlatacağım. Ayrıca VNC sunucusuna nasıl güvenli bir şekilde bağlanacağınızı göstereceğim.
Virtual Network Computing (VNC), başka bir bilgisayarı uzaktan kontrol etmek için klavyenizi ve farenizi kullanmanıza olanak veren bir grafik masaüstü paylaşım sistemidir.
Masaüstü Ortamını Yükleme
Muhtemelen, Debian 10 sunucumuzda masaüstü ortamı yüklü olmayacaktır. İlk adımımız hafif bir masaüstü ortamı kurmak olacaktır.
Debian depolarında çeşitli masaüstü ortamları da bulunmaktadır. Ben, Xfce’yi tercih edilen masaüstü ortamımız olarak kullanacağım. Hızlı, kararlı ve hafif olduğu için Xfce’yi seviyorum, bu da uzak bir sunucuda kullanım için sistemi ideal bir hale getirecektir.
Debian sunucunuza Xfce’yi aşağıdaki komut aracılığı ile yükleyin
sudo apt install xterm xfce4 xfce4-goodies gnome-session xorg dbus-x11 x11-xserver-utils
Sisteminize bağlı olarak Xfce paketlerinin indirilmesi ve yüklenmesi biraz zaman alabilir.
VNC Sunucusunun Kurulumu
TightVNC, TigerVNC ve x11vnc gibi Debian depolarında çeşitli VNC sunucuları da bulunmaktadır. Her VNC sunucusunun, hız ve güvenlik açısından güçlü ve zayıf yönleri olduğunu hatırlatırım. Aktif olarak yüksek performanslı VNC sunucusu olan TigerVNC’yi kullanmayı tercih ettim. Debian sunucunuza TigerVNC’yi yüklemek için aşağıdaki adımları uygulayın.
sudo apt install tigervnc-standalone-server tigervnc-common
VNC sunucusu kurulduktan sonra, ilk yapılandırmayı oluşturmak ve parolayı tanımlamak için vncserver
komutunu çalıştırın. Bu komutu çalıştırırken sudo
kullanmamaya özen gösterin.
Parolayı girmeniz ve parolamayı onaylamanız istenecektir. Yalnızca parola oluşturmayı seçerseniz, kullanıcı VNC sunucusunu kullanarak işlemlerini fare ve klavye ile gerçekleştiremez.
You will require a password to access your desktops.
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
/usr/bin/xauth: file /home/mertcan/.Xauthority does not exist
New 'debian9.localdomain:1 (mertcan)' desktop at :1 on machine debian9.localdomain
Starting applications specified in /etc/X11/Xvnc-session
Log file is /home/mertcan/.vnc/debian9.localdomain:1.log
Use xtigervncviewer -SecurityTypes VncAuth -passwd /home/mertcan/.vnc/passwd :1 to connect to the VNC server.
Not: Yukarıdaki çıktıda hostname’den sonra :1 geldiğini göreceksiniz. Bu, vnc sunucusunun çalıştığı ekran bağlantı noktası numarasını gösterir. Bizim bu durumumuzda, sunucu 5901 numaralı TCP bağlantı noktasında çalışıyor.
Vncserver ile ikinci bir yapılandırma yaparak ekran oluşturursanız, bir sonraki boş bağlantı noktasında çalışacaktır. Buda doğal olarak :2 olacaktır.
vncserver komutunu ilk kez çalıştırdığınızda, parola dosyasını ~/.vnc dizininde oluşturacak ve depolayacaktır.
Dikkat edilmesi gereken nokta, VNC sunucuları ile çalışırken, x’in 5900 + x anlamına gelen bir ekran bağlantı noktası olmasıdır. Bir sonraki adıma ilerlemeden hemen önce VNC ekranını gene vncserver komutunu kullanarak -kill seçeneğini ve argüman olarak sunucu numarasını vererek VNC sunucusunu durdurun.
vncserver -kill :1
Çıktısı ise aşağıdaki gibi olacaktır.
Killing Xtigervnc process ID 8723... success!
VNC Sunucusunu Yapılandırın
Artık hem Xfce hem de TigerVNC’ni sunucuya yüklediğimize göre, TigerVNC’yi Xfce kullanacak şekilde yapılandırmamız gerekiyor. Bunu yapmak için ise aşağıdaki dosyayı oluşturuyoruz
nano ~/.vnc/xstartup
İçeriğini aşağıdaki satırları ekleyerek değiştiriyoruz.
#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
exec startxfce4
Bittiğinde, dosyayı kaydedin ve kapatın. TigerVNC sunucusunu başlattığınızda veya yeniden başlattığınızda yukarıdaki komut otomatik olarak çalıştırılacaktır. Unutmadan söyleyeyim ~/.vnc/xstartup dosyasının yürütme izinlerine de sahip olması gerekir.
chmod u+x ~/.vnc/xstartup
Systemd birim dosyası oluşturma
Systemd birim dosyası, VNC hizmetini gerektiğinde kolayca başlatmamıza, durdurmamıza ve yeniden başlatmamıza izin verecektir.
Metin düzenleyiciyi açın ve aşağıdaki yapılandırmayı kopyalayıp yapıştırın. Kullanıcı adınızla eşleştirmek için 7. satırdaki kullanıcı adını değiştirmeyi sakın unutmayın. Bu yarları yaparken sudo
ayrıcalıklarını kullanmayı unutmayın
sudo nano /etc/systemd/system/[email protected]
İçeriğini aşağıdaki satırları ekleyerek değiştiriyoruz.
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=simple
User=mertcan
PAMName=login
PIDFile=/home/%u/.vnc/%H%i.pid
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill :%i > /dev/null 2>&1 || :'
ExecStart=/usr/bin/vncserver :%i -geometry 1280x720 -alwaysshared -fg
ExecStop=/usr/bin/vncserver -kill :%i
[Install]
WantedBy=multi-user.target
Dosyayı kaydedin ve kapatın.
Yeni bir [email protected]
dosyasının aşağıdaki komutu çalıştırarak systemd’ye bildirin.
sudo systemctl daemon-reload
Ardından, servisi etkinleştirin
sudo systemctl enable [email protected]
Not: @ İşaretinden sonraki 1 numara, VNC hizmetinin çalışacağı ekran bağlantı noktasını tanımlar. Bir önceki bölümde ele aldığımız gibi 1’i kullandığımızdan VNC sunucusu 5901 numaralı bağlantı noktasını dinleyecektir.
Ardından servisi çalıştırın
sudo systemctl start [email protected]
Hizmetin başarıyla başlatıldığını doğrulamak isterseniz
sudo systemctl status [email protected]
Aşağıdaki gibi bir çıktı görmeniz gerekmekte
[email protected] - Remote desktop service (VNC)
Loaded: loaded (/etc/systemd/system/[email protected]; enabled; vendor preset: enabled)
Active: active (running) since Wed 2018-10-02 02:14:43 PDT; 34s ago
Process: 7061 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill :1 > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS)
Main PID: 7271 (vncserver)
Tasks: 0 (limit: 4915)
CGroup: /system.slice/system-vncserver.slice/[email protected]
‣ 7271 /usr/bin/perl /usr/bin/vncserver :1 -geometry 1280x720 -alwaysshared -fg
VNC sunucusuna bağlanma
VNC şifreli bir protokol değildir ve packet sniffing’e maruz kalabilir. Önerilen yaklaşım, yerel makinenizden 5901 numaralı bağlantı noktasındaki trafiği aynı bağlantı noktasındaki sunucuya güvenli bir şekilde yönlendirecek bir SSH tunnel oluşturmaktır.
Konu ile ilgili zamanında yayınladığım SSH Reverse Tunneling İle NAT Arkasındaki Sunucuya Bağlanmak adlı makaleme göz atabilirsiniz.
Linux/MacOS X için
Makinenizde Linux, macOS veya başka bir Unix tabanlı işletim sistemi çalıştırıyorsanız, aşağıdaki komutla kolayca SSH tunnel oluşturabilirsiniz
ssh -L 5901:127.0.0.1:5901 -N -f -l mertcan server-ip-address
Kullanıcı parolasını girmeniz istenecektir.
Windows için
Windows işletim sistemi kullanıyorsanız, PuTTY SSH istemcisini kullanarak SSH tunnel oluşturabilirsiniz.
Sol taraf da yer alan alandan Connection > SSH > Tunnels seçeneğini seçin ve aşağıdaki gibi ip ve port bilgilerinizi girin
Her seferinde bu bilgileri girmeniz gerekmeyecek şekilde ayarları kaydetmek için Sessions alanına geri dönün. Şimdi yapmanız gereken tek şey oluşturduğunuz bu oturum yapılandırmasını Kayıt etmek ve Open tıklayarak uzak sunucuya giriş yapmaktır.
Vncviewer kullanarak uzak masaüstüne bağlanma
Artık SSH tunnel kurduğunuza göre, Vncviewer’ınızı açıp, localhost’taki VNC sunucusuna bağlanabilirsiniz.
Ayrıca Google Chrome tarayıcınız için TigerVNC, TightVNC, RealVNC, UltraVNC gibi VNC görüntüleyicileri de kullanabilirsiniz.