VNC یا Virtual Network Computing بستری ست است که کاربران را قادر می سازد تا به یک سیستم کامپیوتری از راه دور متصل شوند و از رابط کاربری گرافیکی (GUI) استفاده کنند. این دقیقا شبیه به کنترل از راه دور یک برنامه است ، که کلید های کامپیوتر و کاری که ما با ماوس و صفحه کلید انجام می دهیم به کامپیوتر راه دور منتقل می شود . کانفیگ vnc در لینوکس کار سختی نیست!
VNC هم چنین کلیپ بورد را بین دو کامپیوتر به اشتراک می گذارد . VNC بر پایه ی مدل سرویس گیرنده است : سرور VNC که بر روی یک کامپیوتر راه دور اجرا می شود و و درخواست های مشتری را انجام می دهد .
کانفیگ vnc در لینوکس
سوال: در این آموزش چه چیز هایی یاد میگیریم ؟
در این آموزش یاد میگیریم VNC را روی CentOS 7 نصب کنیم . کانفیگ vnc در لینوکس بسیار ساده است. TigerVNC server را که آزادانه از منبع TigerVNC GitHub در دسترس است نصب خواهیم کرد.
برای نشان دادن اینکه VNC چگونه کار می کند ، GNOME desktop را بر روی CentOS نصب خواهیم کرد .
در آموزش کانفیگ vnc در لینوکس دو یوزر ایجاد خواهم کرد و دسترسی VNC را برای آنها پیکر بندی خواهیم کرد ؛ سپس اتصال آنها را به دسکتاپ از راه دور بررسی خواهیم کرد و در نهایت نحوه اتصال امن از راه دورشان را از طریق SSH یاد میگیریم .
پیش نیاز های کانفیگ vnc در لینوکس
برای کانفیگ vnc در لینوکس دستورات، بسته ها و فایل های نشان داده شده در این آموزش بر روی CentOS 7 مورد آزمایش قرار گرفتند. توصیه ی ما به شرح زیر است :
- سیستم عامل : CentOS 7, 64-bit
- منابع مورد نیاز : رم 2 گیگ
برای پیگیری آموزش کانفیگ vnc در لینوکس ، شما باید از یک کاربر sudo استفاده کنید.
هشدار : از دستورات این آموزش را در production Linux server اجرا نکنید ؛ این کار می تواند خلا امنیتی و خرابی ایجاد کند .
قدم اول : ایجاد دو یوزر
برای کانفیگ vnc در لینوکس اول دو یوزر ایجاد میکنیم . این دو یوزر با VNC به CentOS 7 server متصل خواهند شد .
یوزر ها عبارتند از :
- joevnc
- janevnc
از دستور زیر برای ایجاد یوزر joevnc استفاده کنید :
sudo useradd -c "User Joe Configured for VNC Access" joevnc
حالا از دستور زیر برای ست کردن پسورد ورود برای یوزری که ایجاد کردیم ، استفاده کنید :
sudo passwd joevnc
خروجی ای به شکل زیر خواهید دید ، بعد از ست کردن پسورد شما آماده ی ورود به سرور با این یوزر هستید :
Changing password for user joevnc.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
حالا می خواهیم اکانت janevnc را ایجاد کنیم :
sudo useradd -c "User Jane Configured for VNC Access" janevnc
برای janevnc پسورد ست می کنیم :
sudo passwd janevnc
قدم دوم : نصب GNOME Desktop
حالا می خواهیم GNOME desktop را نصب کنیم . GNOME یک نرم افزار آزاد و متن باز هست که یک محیط دسکتاپ بسیار محبوب است .
محیط دسک تاپ دیگری مانند KDE وجود دارد، اما GNOME محبوب تر است. ما از GNOME برای ارتباط با سرور به صورت گرافیکی استفاده می کنیم .
sudo yum groupinstall -y "GNOME Desktop"
بسته به سرعت شبکه شما، این دستور می تواند چند دقیقه طول بکشد.
پس از اینکه بسته نصب شد سرور را ریبوت کنید :
sudo reboot
عیب یابی – سروری که در فاز بوت شدن گیر کرده است
بسته به اینکه چگونه سرور شما راه اندازی شده است، زمانی که دستگاه شروع به کار می کند، ممکن است در فاز بوت باقی بماند که یک پیام مانند زیر دریافت کنید :
Initial setup of CentOS Linux 7 (core)
1) [!] License information (Licence not accepted)
Please make your choice from above ['q' to quit | 'c' to continue | 'r' to refresh]:
برای بازگشت به قبل ، 1 (مجوز به عنوان خوانده شده)، سپس 2 (قبول مجوز)، و سپس C (برای ادامه)را بزنید . شما ممکن است مجبورشوید C را دو یا چند بار فشار دهید. تصویر زیر این مورد را نشان می دهد:
اگر شما چنین اروری ندیدید ، بسیار عالی میتوانید به مرحله ی بعدی بروید .
قدم سوم – نصب TigerVNC Server
TigerVNC یک نرم افزار است که اجازه خواهد داد یک اتصال remote desktop ایجاد کنید .
با استفاده از دستور زیر می توانید این نرم افزار را نصب کنید :
sudo yum install -y tigervnc-server
پس از نصب خروجی ای مانند زیر مشاهده خواهید کرد :
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
. . .
Running transaction
Installing : tigervnc-server-1.2.80-0.30.20130314svn5065.el7.x86_64 1/1
Verifying : tigervnc-server-1.2.80-0.30.20130314svn5065.el7.x86_64 1/1
Installed:
tigervnc-server.x86_64 0:1.2.80-0.30.20130314svn5065.el7
Complete!
تا این مرحله ما VNC server را داریم و GNOME desktop را نصب کردیم و دو یوزر را ایجاد کرده ایم که میتوانند با استفاده از VNC به سرور متصل شوند.
قدم چهارم- کانفیگ کردن VNC Service برای دو یوزر
VNC بعد از نصب برای اولین بار به طور خودکار شروع نمی شود. برای بررسی نصب وی ان سی ، دستور زیر را اجرا کنید :
sudo systemctl status vncserver@:.service
خروجی زیر را خواهید دید :
vncserver@:.service - Remote desktop service (VNC)
Loaded: loaded (/usr/lib/systemd/system/vncserver@.service; disabled)
Active: inactive (dead)
شما هم چنین میتوانید دستور زیر را اجرا کنید :
sudo systemctl is-enabled vncserver@.service
دستور بالا باید خروجی زیر را نشان دهد :
disabled
ممکن است این سوال پیش بیاید که چرا نشان می دهد غیر فعال است ؟
علت آن این است که هر کاربر یک نمونه جداگانه از daemon وی ان سی را آغاز می کند. به عبارت دیگر ، VNC به عنوان یک فرایند واحد اجرا نمی شود که به هر درخواست کاربر پاسخ دهد. هر کاربری که با وی ان سی به سرور متصل می شود یک نمونه daemon جدید را آغاز می کند .
CentOS 7 از daemon systemd استفاده می کند تا خدمات دیگری را انجام دهد . هر سرویسی که به صورت native تحت systemd اجرا می شود ، یک فایل واحد دارد که توسط yum installer در دایرکتوری /lib/systemd/system قرار گرفته است .
فرایند هایی که هنگام بوت شدن به طور خودکار انجام می شوند ، پیوند هایی دارد به فایل واحد سیستم که در مسیر /etc/systemd/system/ قرار دارد .
در مورد ما یک فایل واحد خدمات عمومی در پوشه / lib / systemd / system / ایجاد شده است ، اما در مسیر / etc / systemd / system / هیچ پیوندی ایجاد نشده است.
با دستور زیر می توان این مورد را آزمایش کنید :
sudo ls -l /lib/systemd/system/vnc*
خروجی ای که مشاهده خواهید کرد به شکل زیر خواهد بود :
-rw-r--r--. 1 root root 1744 Jun 10 16:15 /lib/systemd/system/vncserver@.service
حالا با دستور زیر برای آدرس /etc/systemd/system/ این مورد را بررسی میکنیم :
sudo ls -l /etc/systemd/system/*.wants/vnc*
اینبار این مورد وجود ندارد :
ls: cannot access /etc/systemd/system/*.wants/vnc*: No such file or directory
بنابراین اولین قدم برای ما ایجاد دو نمونه ی جداگانه وی ان سی برای دو یوزر است .
برای این کار باید دو نسخه از پرونده ی VNC در /etc/system/system ایجاد کنیم .
در کد های زیر اینکار را با نام های مختلف انجام می دهیم :
sudo cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:4.service
sudo cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:5.service
شاید این سوال پیش بیاید که چرا در نامی که در کد قرار داده ایم دو عدد اضافه کرده ایم ؟
پاسخ این سوال هم به مفهوم خدمات VNC فردی باز میگردد. وی ان سی به صورت دیفالت در پورت 5900 اجرا می شود .
با توجه به اینکه هر کاربر سرور را با وی ان سی مربوط به خود باز میکند ، باید هر کاربر با پورت جداگانه به وی ان سی متصل شود .
حالا می فهمیم اضافه کردن یک عدد در نام فایل به VNC می گوید که سرویس را به عنوان زیرپورت 5900 اجرا کند.
برای مورد ما وی ان سی مربوط به joevnc تحت پورت 5904 و وی ان سی مربوط به janevnc تحت پورت 5905 اجرا خواهد شد .
حالا باید فایل واحد سرویس را ویرایش کنیم .
فایل /etc/systemd/system/vncserver@:4.service را با vi editor یا nano باز کنید :
sudo vi /etc/systemd/system/vncserver@:4.service
حالا باید در قسمت [Service]
فایل تغییرات زیر را اعمال کنید :
به جای <USER> کلمه ی joevnc را جایگزین کنید .
هم چنین عبارت -geometry 1280×1024 را در پایان پارامتر ExecStart
قرار دهید . این مورد فقط اندازه ی صفحه نمایش وی ان سی را تنظیم می کند .
شما در مجموع دو خط را تغییر خواهید داد ، در زیر فایل ویرایش شده را میتوانید ببینید :
# The vncserver service unit file
#
# Quick HowTo:
# 1. Copy this file to /etc/systemd/system/vncserver@:<display>.service
# 2. Edit <USER> and vncserver parameters appropriately
# ("runuser -l <USER> -c /usr/bin/vncserver %i -arg1 -arg2")
# 3. Run `systemctl daemon-reload`
# 4. Run `systemctl enable vncserver@:<display>.service`
#
. . .
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=forking
# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/sbin/runuser -l joevnc -c "/usr/bin/vncserver %i -geometry 1280x1024"
PIDFile=/home/joevnc/.vnc/%H%i.pid
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
[Install]
WantedBy=multi-user.target
جهت انجام اقدامات بعدی کانفیگ vnc در لینوکس فایل را ذخیره کنید و از ویرایشگر خارج شوید .
به طور مشابه فایل /etc/systemd/system/vncserver@:5.service را نیز باید ویرایش کنید :
sudo vi /etc/systemd/system/vncserver@:5.service
در ادامه فقط بخش [Service] را برایتان قرار داده ایم :
[Service]
Type=forking
# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/sbin/runuser -l janevnc -c "/usr/bin/vncserver %i -geometry 1280x1024"
PIDFile=/home/janevnc/.vnc/%H%i.pid
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
در ادامه بایستی دستور زیر را اجرا کنید تا systemd daemon ریلود شود و اطمینان حاصل کنید که VNC برای دو کاربر در زمان بوت شروع می شود:
sudo systemctl daemon-reload
ابتدا بایستی سرور برای یوزر اول فعال شود :
sudo systemctl enable vncserver@:4.service
خروجی :
ln -s '/etc/systemd/system/vncserver@:4.service' '/etc/systemd/system/multi-user.target.wants/vncserver@:4.service'
فعال سازی برای یوزر دوم :
sudo systemctl enable vncserver@:5.service
خروجی :
ln -s '/etc/systemd/system/vncserver@:5.service' '/etc/systemd/system/multi-user.target.wants/vncserver@:5.service'
حالا شما دو وی ان سی برای دو کاربر کانفیگ کرده اید .
قدم پنجم – کانفیگ فایروال
حالا باید فایروال را به شکلی کانفیگ کنیم تا فقط به پورت های 5904 و 5905 اجازه دهد .
معمولا فایروال به صورت دیفالت هنگام بوت شدن سرور فعال می شود اما باید حتما این مورد را چک کنیم :
sudo firewall-cmd --state
و باید حتما خروجی زیر را بگیریم :
running
اگر خروجی “not running” دریفات کردیم با اجرای دستور زیر حتما فایروال فعال خواهد شد :
sudo systemctl start firewalld
اکنون قوانین مربوط به پورت های 5904 و 5905 را اضافه کنید:
sudo firewall-cmd --permanent --zone=public --add-port=5904-5905/tcp
خروجی :
success
حالا باید دستور ریلود فایروال را اجرا کنید :
sudo firewall-cmd --reload
خروجی :
success
قدم ششم- ست کردن پسورد برای VNC
الان ما یک قدم تا مشاهده ی VNC عقب تر هستیم .
در این مرحله باید برای کاربران پسورد های ورود به وی ان سی را ست کنیم . این پسورد کلمه عبور کاربران لینوکس نیست ، بلکه پسوردی برای ورود به VNC است .
یکبار دیگر به عنوان joevnc وارد SSH شویم :
ssh joevnc@your_server_ip
دستور زیر را اجزا کنید :
vncserver
همانطور که در خروجی زیر مشاهده میکنید ، سرور از joevnc برای تنظیم یک رمز عبور VNC درخواست خواهد کرد. پس از تایپ کردن در رمز عبور، برنامه همچنین تعدادی از فایل های ایجاد شده در دایرکتوری خانگی کاربر را نشان می دهد.
You will require a password to access your desktops.
Password:
Verify:
xauth: file /home/joevnc/.Xauthority does not exist
New 'localhost.localdomain:1 (joevnc)' desktop is localhost.localdomain:1
Creating default startup script /home/joevnc/.vnc/xstartup
Starting applications specified in /home/joevnc/.vnc/xstartup
Log file is /home/joevnc/.vnc/localhost.localdomain:1.log
حالا یک SSH دیگر باز کنید و به عنوان janevnc وارد شوید . در اینجا هم VNC را باید راه اندازی کنید و رمز عبور را برای janevnc ست کنید :
vncserver
باید خروجی های مشابهی نیز برای janevnc ببینید .
در پایان باید از SSH اصلی سرویس را ریلود کنید :
sudo systemctl daemon-reload
sudo systemctl restart vncserver@:4.service
sudo systemctl restart vncserver@:5.service
قدم هفتم – اتصال به سرور از راه دور با استفاده از VNC client
برای این آموزش، فرض می کنیم کاربران joevnc و janevnc در حال تلاش برای اتصال به سرور CentOS 7 از رایانه های ویندوز خود هستند.
آنها هر یک به یک سرویس گیرنده VNC برای ویندوز نیاز دارند تا به دسک تاپ از راه دور وارد شوند. client مانند PuTTY است، با این تفاوت که خروجی گرافیکی را نشان می دهد.
VNC client های متفاوتی وجود دارد اما موردی که ما استفاده می کنیم ، RealVNC است .
وقتی VNC Viewer اغاز به کار می کند ، یک دیالوگ باکس شبیه به زیر نمایش داده می شود :
در قسمت VNC Server، آدرس IP سرور CentOS 7 خود را اضافه کنید. شماره پورت 5904 را بعد از IP با استفاده از : مشخص کنید. ما از 5904 استفاده کردیم زیرا این سرویس VNC برای joevnc است.
ما همچنین تصمیم گرفتیم که VNC Viewer روش رمزگذاری را انتخاب کند. این گزینه فقط رمز عبور ارسال شده در شبکه را رمزگذاری می کند. هر گونه ارتباط بعدی با سرور، رمزگذاری نخواهد شد. بعد از اینکه کانکت را زدیم ، یک پیغام اخطار به شکل زیر نشان می دهد .
پس از اینکه هشدار را بپذیرید ، در مرحله ی بعد فرم وارد کردن پسورد نمایش داده می شود .
رمز ورود VNC joevnc را که قبلا تنظیم کرده اید وارد کنید.
یک پنجره جدید نشان می دهد که دسکتاپ GNOME برای سرور Remote CentOS شما است :
همان طور که مشاهده کردید ایجاد محیط گرافیکی در لینوکس سخت نیست و تنها به دقت نیاز دارد. پیغام پیش فرض خوش آمد گویی را قبول کنید و از محیط گرافیکی لینوکس تان لذت ببرید . از اینکه با آموزش کانفیگ vnc در لینوکس همراه ما بودید سپاس گزارم 🙂
شاد و پیروز باشید 😉